/*!
 * jQuery JavaScript Library v1.4.2
 * http://jquery.com/
 *
 * Copyright 2010, John Resig
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * Includes Sizzle.js
 * http://sizzlejs.com/
 * Copyright 2010, The Dojo Foundation
 * Released under the MIT, BSD, and GPL Licenses.
 *
 * Date: Sat Feb 13 22:33:48 2010 -0500
 */
(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML="   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);

(function($){$.fn.lazyload=function(options){var settings={threshold:0,failurelimit:0,event:"scroll",effect:"show",container:window};if(options){$.extend(settings,options);}
var elements=this;if("scroll"==settings.event){$(settings.container).bind("scroll",function(event){var counter=0;elements.each(function(){if($.abovethetop(this,settings)||$.leftofbegin(this,settings)){}else if(!$.belowthefold(this,settings)&&!$.rightoffold(this,settings)){$(this).trigger("appear");}else{if(counter++>settings.failurelimit){return false;}}});var temp=$.grep(elements,function(element){return!element.loaded;});elements=$(temp);});}
this.each(function(){var self=this;if(undefined==$(self).attr("original")){$(self).attr("original",$(self).attr("src"));}
if("scroll"!=settings.event||undefined==$(self).attr("src")||settings.placeholder==$(self).attr("src")||($.abovethetop(self,settings)||$.leftofbegin(self,settings)||$.belowthefold(self,settings)||$.rightoffold(self,settings))){if(settings.placeholder){$(self).attr("src",settings.placeholder);}else{$(self).removeAttr("src");}
self.loaded=false;}else{self.loaded=true;}
$(self).one("appear",function(){if(!this.loaded){$("<img />").bind("load",function(){$(self).hide().attr("src",$(self).attr("original"))
[settings.effect](settings.effectspeed);self.loaded=true;}).attr("src",$(self).attr("original"));};});if("scroll"!=settings.event){$(self).bind(settings.event,function(event){if(!self.loaded){$(self).trigger("appear");}});}});$(settings.container).trigger(settings.event);return this;};$.belowthefold=function(element,settings){if(settings.container===undefined||settings.container===window){var fold=$(window).height()+$(window).scrollTop();}else{var fold=$(settings.container).offset().top+$(settings.container).height();}
return fold<=$(element).offset().top-settings.threshold;};$.rightoffold=function(element,settings){if(settings.container===undefined||settings.container===window){var fold=$(window).width()+$(window).scrollLeft();}else{var fold=$(settings.container).offset().left+$(settings.container).width();}
return fold<=$(element).offset().left-settings.threshold;};$.abovethetop=function(element,settings){if(settings.container===undefined||settings.container===window){var fold=$(window).scrollTop();}else{var fold=$(settings.container).offset().top;}
return fold>=$(element).offset().top+settings.threshold+$(element).height();};$.leftofbegin=function(element,settings){if(settings.container===undefined||settings.container===window){var fold=$(window).scrollLeft();}else{var fold=$(settings.container).offset().left;}
return fold>=$(element).offset().left+settings.threshold+$(element).width();};$.extend($.expr[':'],{"below-the-fold":"$.belowthefold(a, {threshold : 0, container: window})","above-the-fold":"!$.belowthefold(a, {threshold : 0, container: window})","right-of-fold":"$.rightoffold(a, {threshold : 0, container: window})","left-of-fold":"!$.rightoffold(a, {threshold : 0, container: window})"});})(jQuery);

/* 详情页放大镜 */
(function($){$.fn.jqueryzoom=function(options){var settings={xzoom:200,yzoom:200,offset:10,position:"right",lens:1,preload:1};if(options){$.extend(settings,options)}var noalt='';$(this).hover(function(){var imageLeft=$(this).offset().left;var imageTop=$(this).offset().top;var imageWidth=$(this).children('img').get(0).offsetWidth;var imageHeight=$(this).children('img').get(0).offsetHeight;noalt=$(this).children("img").attr("alt");var bigimage=$(this).children("img").attr("jqimg");$(this).children("img").attr("alt",'');if($("div.zoomdiv").get().length==0){$(this).after("<div class='zoomdiv'><img class='bigimg' src='"+bigimage+"'/></div>");$(this).append("<div class='jqZoomPup'>&nbsp;</div>")}if(settings.position=="right"){if(imageLeft+imageWidth+settings.offset+settings.xzoom>screen.width){leftpos=imageLeft-settings.offset-settings.xzoom}else{leftpos=imageLeft+imageWidth+settings.offset}}else{leftpos=imageLeft-settings.xzoom-settings.offset;if(leftpos<0){leftpos=imageLeft+imageWidth+settings.offset}}$("div.zoomdiv").css({top:imageTop,left:leftpos});$("div.zoomdiv").width(settings.xzoom);$("div.zoomdiv").height(settings.yzoom);$("div.zoomdiv").show();if(!settings.lens){$(this).css('cursor','crosshair')}$(document.body).mousemove(function(e){mouse=new MouseEvent(e);var bigwidth=$(".bigimg").get(0).offsetWidth;var bigheight=$(".bigimg").get(0).offsetHeight;var scaley='x';var scalex='y';if(isNaN(scalex)|isNaN(scaley)){var scalex=(bigwidth/imageWidth);var scaley=(bigheight/imageHeight);$("div.jqZoomPup").width((settings.xzoom)/scalex);$("div.jqZoomPup").height((settings.yzoom)/scaley);if(settings.lens){$("div.jqZoomPup").css('visibility','visible')}}xpos=mouse.x-$("div.jqZoomPup").width()/2-imageLeft;ypos=mouse.y-$("div.jqZoomPup").height()/2-imageTop;if(settings.lens){xpos=(mouse.x-$("div.jqZoomPup").width()/2<imageLeft)?0:(mouse.x+$("div.jqZoomPup").width()/2>imageWidth+imageLeft)?(imageWidth-$("div.jqZoomPup").width()-2):xpos;ypos=(mouse.y-$("div.jqZoomPup").height()/2<imageTop)?0:(mouse.y+$("div.jqZoomPup").height()/2>imageHeight+imageTop)?(imageHeight-$("div.jqZoomPup").height()-2):ypos}if(settings.lens){$("div.jqZoomPup").css({top:ypos,left:xpos})}scrolly=ypos;$("div.zoomdiv").get(0).scrollTop=scrolly*scaley;scrollx=xpos;$("div.zoomdiv").get(0).scrollLeft=(scrollx)*scalex})},function(){$(this).children("img").attr("alt",noalt);$(document.body).unbind("mousemove");if(settings.lens){$("div.jqZoomPup").remove()}$("div.zoomdiv").remove()});count=0;if(settings.preload){$('body').append("<div style='display:none;' class='jqPreload"+count+"'>sdsdssdsd</div>");$(this).each(function(){var imagetopreload=$(this).children("img").attr("jqimg");var content=jQuery('div.jqPreload'+count+'').html();jQuery('div.jqPreload'+count+'').html(content+'<img src=\"'+imagetopreload+'\">')})}}})(jQuery);function MouseEvent(e){this.x=e.pageX;this.y=e.pageY}

/**
 * 设置cookie
 * @param cookieName
 * @param cookieValue
 * @param seconds 过期时间
 * @param path 路径
 * @param domain 域
 */
function setCookie(cookieName,cookieValue, seconds, path, domain, secure) {
	var expires = new Date();
	expires.setTime(expires.getTime() + seconds);
	document.cookie = cookieName + '=' + escape(cookieValue) + (seconds ? '; expires=' + expires.toGMTString() : '') + (path ? '; path=' + path : '/') + (domain ? '; domain=' + domain : '') + (secure ? '; secure' : '');
}
//获取cookie
function getCookie(c_name){
	if (document.cookie.length > 0){
		c_start=document.cookie.indexOf(c_name + "=");
		if (c_start != -1){
			c_start=c_start + c_name.length + 1;
			c_end=document.cookie.indexOf(";", c_start);
			if (c_end == -1) c_end = document.cookie.length;
			return unescape(document.cookie.substring(c_start, c_end));
		}
	}
	return "";
}
//统计数据
function statistics() {
	//获取用户唯一信息
	var stati_unique_id = getCookie('stati_client_mark_code');
	if(stati_unique_id) {
	} else {
		stati_unique_id = new Date().getTime() + parseInt(Math.random() * 1000);
		setCookie('stati_client_mark_code', stati_unique_id, 365 * 24 * 3600 * 1000, '/', '.' + getHost(window.location.href));
	}
    var user_id = getCookie('bg_user_id');
    user_id = user_id ? $.parseJSON(user_id) : '';
    var session_id = getCookie('bg_uid');
    session_id = session_id ? session_id : getCookie('PHPSESSID');
	//设置发送参数
	var stati_datas = {
		'h' : stati_unique_id,
		'sessionId' : session_id,
		'r' : encodeURIComponent(document.referrer),
		'u' : encodeURIComponent(user_id),
		'sc' : encodeURIComponent(getCookie('cpsVerify')),
		'cf' : getCookie('cf'),
		'cs' : getCookie('cs'),
		'ads' : getCookie('ads'),
		'url' : encodeURIComponent(document.location.href)
	},jsonStr = '';
	var statiHost = (  window.location.href.indexOf('.com') == '-1' ) ? 'tn' : 'com';
	var stati_domain = window.location.protocol + '//stat.banggo.' + statiHost + '/' + 'logs.stat';
	for( x in stati_datas ){
		if( typeof(stati_datas[x]) != 'undefined' && stati_datas[x] != '' ) jsonStr += ( ( x == 'h' ) ? '' : ',' ) + '"' + x + '" : "' + stati_datas[x] + '"';
	}
	$.getJSON( stati_domain + '?callback=?&json={'+jsonStr+'}&t='+new Date().getTime());
	//用于跨域请求，返回值无法解析，以下代码无法在回调函数中执行，固记录数据会有部分丢失
	setCookie('cf', '', -1, '/', '.' + getHost(window.location.href));
	setCookie('cs', '', -1, '/', '.' + getHost(window.location.href));
	setCookie('ads', '', -1, '/', '.' + getHost(window.location.href));
}

//执行事件绑定
$(document).ready(function(){
	clickSetCookie();
	adSetCookie();
});

//获取域名
function getHost(url) {
	var host = "null";
	if (typeof url == "undefined" || null == url) url = window.location.href;
	var regex = /.*\:\/\/([^\/|:]*).*/;
	var match = url.match(regex);
	if (typeof match != "undefined" && null != match) host = match[1];
	if (typeof host != "undefined" && null != host) {
		var strAry = host.split(".");
		if (strAry.length > 1) host = strAry[strAry.length - 2] + "." + strAry[strAry.length - 1];
	}
	return host;
}

//cookie记录点击行为
function clickSetCookie(){
	$("*[sl^='b_'] a").each(function(){
		$(this).mousedown(function(e){
			if( e.which == '2' ) return true;
			var sl = $(this).parents("*[sl^='b_']").attr("sl"),slId = $(this).attr("slId");
			if( typeof(slId) != 'undefined' ) sl += '_' + slId;
			setCookie('cf', sl, 20000, '/', '.' + getHost(window.location.href));
		});
	});
	$("*[sl^='s_'] a,*[sl^='s_'] span,*[sl^='s_'] img").each(function(){
		$(this).mousedown(function(e){
			if( e.which == '2' ) return true;
			var sl = getCookie('cs'),snsl = $(this).parents("*[sl^='s_']").attr("sl"),snslId = $(this).attr("slId");
			if( typeof(snslId) != 'undefined' ) snsl += '_' + snslId;
			if( sl.indexOf(',' + snsl) == '-1' ) sl += ',' + snsl;
			setCookie('cs', sl, 20000, '/', '.' + getHost(window.location.href));
		});
	});
}
//cookie记录广告点击行为
function adSetCookie(){
	var adArr = '';
	$("*[id^='ad_'] a").each(function(){
		var adPosId = $(this).parents("*[id^='ad_']").attr("id").substr(3);
		var adId = ( typeof($(this).attr("ad")) != 'undefined' ) ? $(this).attr("ad") : $(this).parents("*[ad]").attr("ad");
		$(this).mousedown(function(e){
			if( e.which == '2' ) return true;
			setCookie('cf', 'ad_'+adPosId+'_'+adId, 20000, '/', '.' + getHost(window.location.href));
		});
		if( typeof(adId) != 'undefined' && adId != null && adId != 'undefined' ) adArr += ',ad_'+adPosId+'_'+adId;
		setCookie('ads', adArr, 20000, '/', '.' + getHost(window.location.href));
	});
}


//主站js对象
var bg = {};
//工具类对象
bg.utils = {};
//公共类对象
bg.common = {};
//搭配js对象
bg.matching = {};
//手机js对象
bg.wap = {};
//小插件
bg.widget = {};
/*三层机构使用太繁琐，logic作为文件名*/

/**
+----------------------------------------------------------
* 逻辑处理方法
+----------------------------------------------------------
*/
var logic = {

	/**
	+----------------------------------------------------------
	* 校验方法
	+----------------------------------------------------------
	*/
	check : {

		/**
		+----------------------------------------------------------
		* 判断是否是指定的类型
		* @obj : 数据（任何类型）
		* @type : 类型（number型）
		* return : bool
		+----------------------------------------------------------
		*/
		isType : function(obj,type){
			var objType = {1:'number',2:'string',3:'boolean',4:'object',5:'function',6:'undefined'};
			return typeof(obj) == objType[type];
		}

	},

	/**
	+----------------------------------------------------------
	* 计算方法
	+----------------------------------------------------------
	*/
	count : {
		
		/**
		+----------------------------------------------------------
		* 计算数组一维值数量
		* @obj : arr、obj
		* return : number
		+----------------------------------------------------------
		*/
		objSize : function(obj) {
			var size = 0, key;
			for (key in obj) {
				if (obj.hasOwnProperty(key)) size++;
			}
			return size;
		}

	},

	/**
	+----------------------------------------------------------
	* 显示数据处理
	+----------------------------------------------------------
	*/
	handle : {
	
		/**
		+----------------------------------------------------------
		* 根据ad_order展示不同顺序  0:按排期;1:按权重
		* @data : arr、obj
		* return : obj
		+----------------------------------------------------------
		*/
		handleData : function(data){
			switch( data['conf']['ad_order'] ){
				case '0':
					return this.accordSchedule(data);
					break;
				case '1':
					return this.accordPriority(data);
					break;
				default:
					break;
			}
		},

		/**
		+----------------------------------------------------------
		* 按排期顺序展示数据
		* @data : arr、obj
		* return : obj
		+----------------------------------------------------------
		*/
		accordSchedule : function(data){
			var _data = new Array,list = this.accordPriority(data),nowTime = new Date().getTime() / 1000;
			for( y in data['data'] ){
				_data[data['data'][y]['id']] = data['data'][y];
			}
			for( x in data['schedule'] ){
				if( nowTime >= data['schedule'][x]['start_time'] && nowTime <= data['schedule'][x]['end_time'] ){
					var i = data['conf']['ad_sum'] - data['schedule'][x]['priority'];
					if( typeof(_data[data['schedule'][x]['adid']]) != 'undefined' )
						list[i] = _data[data['schedule'][x]['adid']];
				}
			}
			return list;
		},

		/**
		+----------------------------------------------------------
		* 按权重顺序展示数据
		* @data : arr、obj
		* return : obj
		+----------------------------------------------------------
		*/
		accordPriority : function(data){
			var list = new Array,i = 0;
			for( x in data['data'] ){
				if( i < data['conf']['ad_sum'] ){
					list[x] = data['data'][x];
					i++;
				}
			}
			return list;
		}

	}

}


/**
+----------------------------------------------------------
* html拼接方法
+----------------------------------------------------------
*/
var htmlStr = {

	/**
	+----------------------------------------------------------
	* 基础Html
	+----------------------------------------------------------
	*/
	basis : {
		
		/**
		+----------------------------------------------------------
		* html中map热点标签拼接方法
		* @data : arr、obj
		* return : str
		+----------------------------------------------------------
		*/
		mapMore : function(data){
			if( !logic.check.isType(data,4)  ) return;
			var x,str = '';
			for(x in data){
				str += '<area shape="' + data[x]['shape'] + '" coords="' + data[x]['coords'] + '" href="' + data[x]['href'] + '" target="_blank" alt="' + data[x]['alt'] + '">';
			}
			return '<map name="' + data[x]['usemap'] + '">' + str + '</map>';
		},

		/**
		+----------------------------------------------------------
		* html中单一Img标签拼接方法
		* @data : arr、obj
		* return : str
		+----------------------------------------------------------
		*/
		imgOne : function(data){
			if( !logic.check.isType(data,4) ) return;
			var mapname = '',mapstr = '';
			if( logic.check.isType(data['map'],4) ){
				mapstr = this.mapMore( data['map'] );
				for( x in data['map'] ){
					mapname = ' usemap="#' + data['map'][x]['usemap'] + '"';
					break;
				}
			}
			return '<img alt="' + data['title'] + '" src="' + data['src'] + '"' + ( data['height'] > 0 ? ' height="' + data['height'] + '"' : '' ) + ' border="0" ' + ( data['width'] > 0 ? 'width="' + data['width'] + '"' : '' ) + mapname + '>' + mapstr;
		},

		/**
		+----------------------------------------------------------
		* html中单一A标签拼接方法
		* @data : arr、obj
		* return : str
		+----------------------------------------------------------
		*/
		AOne : function(data){
			if( !logic.check.isType(data,4) ) return;
			return '<a ad="' + data['id'] + '" class="' + data['class'] + '" title="' + data['title'] + '" href="' + data['href'] + '" target="_blank">' + data['title'] + '</a>';
		},

		/**
		+----------------------------------------------------------
		* html中单一A加Img标签拼接方法
		* @data : arr、obj
		* return : str
		+----------------------------------------------------------
		*/
		divAImgOne : function(data){
			if( !logic.check.isType(data,4) ) return;
			return '<div ad="' + data['id'] + '" style="' + data['class'] + '"><a title="' + data['title'] + '" href="' + data['href'] + '" target="_blank">' + this.imgOne( data ) + '</a></div>';
		},

		/**
		+----------------------------------------------------------
		* html中单一div加Img标签拼接方法
		* @data : arr、obj
		* @isClose : 1有关闭按钮；0无关闭按钮（默认）
		* return : str
		+----------------------------------------------------------
		*/
		divImgOne : function(data,isClose){
			if( !logic.check.isType(data,4) ) return;
			return '<div class="' + data['class'] + '">' + this.imgOne( data ) + ( (isClose == 0) ? '' : '<em class="icon btn_close_1">关闭</em>' ) + '</div>';
		},

		/**
		+----------------------------------------------------------
		* flash
		* @data : arr、obj
		* return : str
		+----------------------------------------------------------
		*/
		flashOne : function(data){
			if( !logic.check.isType(data,4) ) return;
			return '<div ad="' + data['id'] + '"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="' + data['width'] + '" height="' + data['height'] + '" id="' + data['class'] + '" align="middle"><param name="movie" value="' + data['src'] + '" /><param name="quality" value="high" /><param name="bgcolor" value="#00a0ea" /><param name="play" value="true" /><param name="loop" value="true" /><param name="wmode" value="opaque"><param name="scale" value="showall" /><param name="menu" value="true" /><param name="devicefont" value="false" /><param name="salign" value="" /><param name="allowScriptAccess" value="sameDomain" /><!--[if !IE]>--><object type="application/x-shockwave-flash" data="' + data['src'] + '" width="760" height="418"><param name="movie" value="' + data['src'] + '" /><param name="quality" value="high" /><param name="bgcolor" value="#00a0ea" /><param name="play" value="true" /><param name="loop" value="true" /><param name="wmode" value="opaque"><param name="scale" value="showall" /><param name="menu" value="true" /><param name="devicefont" value="false" /><param name="salign" value="" /><param name="allowScriptAccess" value="sameDomain" /><!--<![endif]--><a href="http://www.adobe.com/go/getflash"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="获得 Adobe Flash Player" /></a><!--[if !IE]>--></object><!--<![endif]--></object></div>'
		},

		/**
		+----------------------------------------------------------
		* html中多个A标签拼接方法
		* @data : arr、obj
		* return : str
		+----------------------------------------------------------
		*/
		AMore : function(data){
			if( !logic.check.isType(data,4) ) return;
			var str = '',x;
			for( x in data){
				str += this.AOne( data[x] );
			}
			return str;
		}

	},

	/**
	+----------------------------------------------------------
	* 广告Html
	+----------------------------------------------------------
	*/
	ad : {

		/**
		+----------------------------------------------------------
		* 无效果图html拼接
		* @html : 组合的html代码
		* @data : arr、obj
		* @sum : int(显示广告个数)
		* @arr : arr(按顺序显示的广告id)
		* return : str
		+----------------------------------------------------------
		*/
		adOriginal : function(html,data){
			return html;
		},

		/**
		+----------------------------------------------------------
		* 轮播图html拼接
		* @html : 组合的html代码
		* @data : arr、obj
		* return : str
		+----------------------------------------------------------
		*/
		adCarousel : function(html,data){
			var shtml= '';
			html = html.replace(/src="/g,'src="http://s.mb-go.com/pub7/style/images/grey.gif" rel="');
			switch( data[0]['position'] ){
				case '166':
					shtml += '<div id="classify_1">';
					// 去掉首页的banner上的导航文字
					// shtml += '<div class="classify_link">' + htmlStr.basis.AMore(data[0]['remark']['nav']) + '<div class="fold"></div></div>';
					shtml += '<a href="'+consts('index')+'/Article/articleNew.shtml" class="link_more" target="_blank">更多</a></div>';
					break;
			}
			return '<div id="adInterfaceScroll_' + data[0]['position'] + '">' + html + '</div>' + shtml ;
		}


	}

};



/**
+----------------------------------------------------------
* 轮播图效果
* times: 设置轮播间隔，默认5000毫秒
+----------------------------------------------------------
*/
(function($) {
	$.fn.extend({
		slide:function(options) {
			var defaults = {
					times: 5000
			}
			var options = $.extend(defaults, options);
			var auto = null;
			var obj = $(this);
			obj.addClass("ui_slide");
			var count = obj.children("div").length;
			var n = 0;
			var stid;

			var ulcontent = '<ul>';
			for(var i=1; i<=count; i++){
				ulcontent += "<li>"+i+"</li>";
			}
			ulcontent = ulcontent+"</ul>";
			//大于1张广告图片时，显示数字按钮
			if (count > 1) {
				obj.append(ulcontent);
			}

			obj.children("div").eq(0).find("img").each(function(){
				$(this).attr("src",$(this).attr("rel"));
			});
			
			
			obj.children("div").css({
				"opacity": 0,
				"z-index": 0
			});
			obj.children("div:first-child").css({
				"opacity": 1,
				"z-index": 1
			});
			obj.find("li").eq(0).addClass("active");			
			obj.find("li").click(function(){
				i = $(this).text()-1;
				n = i;
				if (n >= count) return;

				obj.children("div").filter(":visible").css("z-index", '0');
				obj.children("div").eq(n).css("z-index", '1').animate({ 
					'opacity': 1
				}, 400, function(){
					obj.children("div").eq(n).siblings("div").animate({
						'opacity': 0
					}, 200);
				});

				//解析图片背景
				obj.children("div").eq(n).find("img").each(function(){
					if($(this).attr("src") != $(this).attr("rel")){
						$(this).attr("src", $(this).attr("rel"));
					}
				});
				//按钮添加当前选中样式
				$(this).addClass("active").siblings().removeClass("active");
			});
			
			//大于1张广告图片时，执行自动轮播
			if (count > 1) {
				obj.mouseover(function() {
					clearInterval(auto);
				}).mouseout(function() {
					auto = setInterval(showAuto, options.times);
				});
			
				auto = setInterval(showAuto, options.times);
			}

			//自动轮播方法
			function showAuto(){
				n = n >= (count - 1) ? 0 : ++n;
				
				obj.children("div").eq(n).css("z-index", '1').animate({ 
					'opacity': 1
				}, 400, function(){					
					obj.children("div").eq(n-1).css({
						"z-index": 0
					});			
				});
				obj.children("div").eq(n-1).animate({ 
					'opacity': 0
				}, 200);

				obj.children("div").eq(n).find("img").each(function(){					
                    if($(this).attr("src") != $(this).attr("rel")){
						$(this).attr("src", $(this).attr("rel"));
					}
                });
				
				obj.find("li").eq(n).addClass("active").siblings().removeClass("active");
			}
		},
		wap_slide: function(options) {			
			var imgw=$("img:first").width();
			var obj = $(this);
			var str = '<div id="wrapper"><div id="scroller"><ul id="thelist">', listr = '';
			
			obj.children("div").each(function(){
				listr += '<li ad="'+$(this).attr('ad')+'">'+$(this).html()+'</li>';
			});

			str += listr+'</ul></div></div>';
			obj.html(str);
			
			var myScroll, scrollImgLen = $("#scroller li").length, indicatorStr = '';
			$("#scroller").css("width",function(){ return scrollImgLen*imgw;});	
			
			for( i=1; i<=scrollImgLen; i++ ){
				indicatorStr += '<li' + ( i==1 ? ' class="active"' : '' ) + '>' + i + '</li>';
			}		
			
			$("#thelist").find("img").eq(0).attr("src",$("#thelist").find("img").eq(0).attr("rel"));		
			obj.find("#wrapper").append('<div id="nav" class="scrollCur"><ul id="intr">'+indicatorStr+'</ul></div>');	
			//以上为添加数据节点		
					
			document.addEventListener('DOMContentLoaded', loaded, false);
			var gc = $("#intr .active").index();
			
			function loaded() {
			   var globleScroll = { 
					  autoScroll : true,
					  nowpage:null
				}
				
				myScroll = new iScroll('wrapper', {
					snap: true, 
					momentum: false, 
					hScrollbar: false, 
					vScoll:false, 
					vScrollbar: false, 
					onScrollStart :function(){           	
						globleScroll.autoScroll = false;
		           		clearInterval(globleScroll.autoScrollInterval);
		           	},
					onScrollEnd: function () {					
						$("#thelist").find("img").eq(this.currPageX).attr("src",$("#thelist").find("img").eq(this.currPageX).attr("rel"));
						$('#intr > li.active').removeClass("active");		
						$('#intr > li:nth-child(' + (this.currPageX+1) + ')').addClass("active");
						globleScroll.autoScroll = true;
						gc = this.currPageX;	
						autoplay();
					}
				});

				//自动轮播		
				sc = $("#scroller li").length;
				var kk = Math.floor(1000/sc)/10;
				$("#intr li").css("width",(kk+'%'));
				
				function autoplay() {		
					 globleScroll.autoScrollInterval = setInterval(function() {
		             	globleScroll.autoScroll = true;//是手动还是自动滚动			
						gc++;

					 	if(gc >= sc ){
							gc=0;
					 	}	

						$("#thelist").find("img").eq(gc).attr("src",$("#thelist").find("img").eq(gc).attr("rel"));			 
						
						var mov = -(gc * imgw)+'px';	
						$("#scroller").css({"transition-property":"transform","transform-origin":"left top 0px","-webkit-transform":'translate('+mov+',0px) scale(1) translateZ(0px)',"-moz-transform":'translate('+mov+',0px) scale(1) translateZ(0px)',"-o-transform":'-ms-translate('+mov+',0px) scale(1) translateZ(0px)',"transform":'translate('+mov+',0) scale(1) translateZ(0px)',"transition": "300ms","-webkit-transition":"300ms"});			 	
						$('#intr > li.active').removeClass("active");		
						$('#intr > li:nth-child(' + (gc+1) + ')').addClass("active");				
		        	},3000);
			 	}
	 			autoplay();
			}
		}
	});
})(jQuery);

/**
+----------------------------------------------------------
* 首页轮播图效果
* media_type: 1 图片广告,2 Flash,3 广告代码,4 文字广告,5 广告魔方
+----------------------------------------------------------
*/
function adShow( adposid, ctype ){
	if( typeof(adList) == 'undefined' ) return;
	var params = {adposid:adposid},i = 0,adArr,_adArr,id_array = adposid.split(","), ctype = ctype ? ctype : 1;
	$(id_array).each(function(){
		if( typeof(adList) == 'undefined' || typeof(adList[id_array[i]]) == 'undefined' ) return true;
		_adArr = logic.handle.handleData(adList[id_array[i]]);
		adArr = ( typeof(_adArr) != 'undefined' ) ? _adArr : adList['178']['data'];
		if( typeof(adArr['0']) == 'undefined' ) return true;
		var html = '',_i = 0;
		for( x in adArr ){
			if( _i >= adArr[x]['ad_sum'] ) break;
			switch( adArr[x]['media_type'] ){
				case '1':
					html += htmlStr.basis.divAImgOne( adArr[x] );
					break;
				case '2':
					html += htmlStr.basis.flashOne( adArr[x] );
					break;
				default:
					html += '<div ad="' + adArr[x]['id'] + '" style="' + adArr[x]['class'] + '">' + adArr[x]['code'] + '</div>';
					break;
			}
			_i++;
		}
		$('#ad_'+id_array[i]).html(htmlStr.ad[adList[id_array[i]]['conf']['ad_fun']]( html,adArr ) );
	});
	if( typeof(adList[id_array[i]]) != 'undefined' && adList[id_array[i]]['conf']['ad_fun'] == 'adCarousel' ){
		if( (adList[id_array[i]]['conf']['channel_type']&ctype) == 1 ) {
			$('#adInterfaceScroll_' + adList[id_array[i]]['data'][0]['position']).slide();
		} else if( (adList[id_array[i]]['conf']['channel_type']&ctype) == 2 ) {
			$('#adInterfaceScroll_' + adList[id_array[i]]['data'][0]['position']).wap_slide();
		}
	}
}


//广告自动运行
$(document).ready(function(){
	$("div[id^='ad_']").each(function(){
		var adPosId = $(this).attr("id").substr(3);
		var return_arr = Array(166,194,200,202,203,204,205,206,207,150,144,148,182,146);
		for( x in return_arr ) {
			if( return_arr[x] == adPosId ) return true;
		}
		if( adPosId != 181 ) adShow(adPosId);
	});
});

$(document).ready(function(){
	
	//购物车下拉
	if ($("#shopping_bag").length > 0) {
		bg.common.showCart();
	}
	
	
	//收藏邦购
	if ($(".addToFavorite").length> 0) {

	bg.common.addFavorite(".addToFavorite");
	};
	
	//获取商品即时信息(标签)	
	if ($(".search_list").length > 0 || $(".recommend").length > 0 || $(".goods_recommend").length > 0) {
		bg.common.ajaxGetGoodsInfo(".search_list, .recommend, .goods_recommend");
	}
	
	//顶部导航top_menu下拉菜单	
	if ($(".ui_navs").length > 0) {
		bg.utils.toggleClass(".ui_navs", "hover", "ui_navs_on");
	}
	
	//右侧栏广告
	if ($("#floarbar_right")) {
		var fbr = $("#floarbar_right");
	
		fbr.find(".close_floarbar_right").click(function(e) {
			fbr.hide();
			
			fbr.parents("div[id^='ad_']").hide();

			e.preventDefault();
		});
	}

	//右侧栏gototop宽度变化
	if ($("#goToTop").length > 0) {
		bg.utils.toggleWidth("#goToTop", 90, 35);
	}

	$("#goToTop .app").hover(function() {
		$(this).find(".getApp").stop().animate({"height":112},200);
	},function() {
		$(this).find(".getApp").stop().animate({"height":0},200);
	});
	
	//返回顶部
	$(".goto_top").bind("click", function(e){
		bg.utils.scrollToIt("", 500);
		e.preventDefault();
	});
	    

	//提示信息 关闭按钮
	$(".info .btn_close, .doubt .btn_close, .success .btn_close, .notice .btn_close, .error .btn_close, .top_notice .btn_close_1").live('click',function(){
		$(this).parent().remove();
	});
	
	//关闭提示信息
	$(".icon_close").click(function(){
		$(this).parent().hide();
	});

});


// 切换验证码图片
function validPic(obj) {
	$(obj).attr('src', consts('act') + "/User/verify?" + Math.random());
}

//判断空字符模板
function trim(str){
	return str.replace(/(^\s*)|(\s*$)/g, "");
}


//登录 和 注册 弹窗
/*
 * 注册登录弹出层用法<a href="javascript:;" class="btn btn_common" onclick="_common_box('title'),pop_login(1,'')"><span>用户登录</span></a>
 **/
//公共的弹出层背景
function _common_box(title){
    $("body","html").css({height: "100%", width: "100%"});
    var _html = "";
        _html +='<div id="pop_window"><table border="0" cellpadding="0" cellspacing="0">';
        _html +='<tr><td class="pop_tl"></td><td class="pop_tc"></td><td class="pop_tr"></td></tr>';
        _html +='<tr>';
        _html +='<td class="pop_cl"></td>';
        _html +='<td class="pop_cc">';
        _html +='<div id="pop_header"><span>'+title+'</span><em class="btn btn_close">关闭</em></div>';
        _html +='<div id="pop_content"><div class="pop_content_inner"></div></div>';
        _html +='</td>';
        _html +='<td class="pop_cr"></td>';
        _html +='</tr>';
        _html +='<tr><td class="pop_bl"></td><td class="pop_bc"></td><td class="pop_br"></td></tr>';
        _html +='</table></div>';
        _html +='<div id="pop_overlay" class="pop_overlay"></div>';
        _html +='<div id="pop_load"></div>';

        $("body").append(_html);
		//判断是否为ie6，是则添加iframe，解决select框的bug
		if ($.browser.msie && ($.browser.version == "6.0") && !$.support.style){
			$("#pop_overlay").html('<iframe src="" frameborder="0" style="width:100%; height:100%; opacity:0; filter:alpha(opacity=0)"></iframe>');
		}
        $("#pop_header .btn_close, #pop_overlay").click(close_pop_window);
}
//删除弹窗
function close_pop_window(){
	$("#pop_window").remove();
	$("#pop_overlay").remove();
	$("#pop_load").remove();
}
//登陆框
function pop_login( isajax,fun )
{
	var _html = "";
	_html +='<div id="tablist_1">';
	_html +='<div id="pop_login">';
	_html +='<ul class="tab_menu">';
	_html +='<li class="current"><a href="javascript:;">登 录</a></li>';
	_html +='<li><a href="javascript:;">注 册</a></li>';
	_html +='</ul>';

 	//表单HTML
	_html +='<div id="pop_login_form" class="tab_con">';
	_html +='<form id="login_form" action="/User/asynclogin" method="post">';
	_html +='<table border="0" cellpadding="0" cellspacing="0"><tr>';
	_html +='<tr>'
	_html +='<th>用户名：<div id="p3p"></div></th>';
	_html +='<td>';
	_html +='<input type="text" class="text login_text" name="luserid" maxlength="40"/>';
    _html +='<input type="hidden" name="ajax" value="1"/>';
	_html +='<div class="verify_text"><span class="tips" style="display:none">请输入用户名。</span><span class="errorinfo Lcfl red" >&nbsp;</span></div>';
	_html +='</td>';
	_html +='</tr>';
	_html +='<tr>';
	_html +='<th>密码：</th>';
	_html +='<td>';
	_html +='<input type="password" class="text login_text" name="lpassword" maxlength="16"/>';
	_html +='<div class="verify_text"><span class="tips" style="display:none">请输入密码。</span><span class="errorinfo Lcfl">&nbsp;</span></div>';
	_html +='</td>';
	_html +='</tr>';//验证码
	_html +='<tr>';
	_html +='<th>验证码：</th>';
	_html +='<td>';
	_html +='<input type="text" name="checknumber" class="text login_text_small" style="width:50px"/> <span><img width="50" height="22px" alt="点击更换验证码" class="yanzhengma"  id="register_box_vcode"style="cursor: pointer; vertical-align:top;" onclick="validPic(this)" name="vcode" src="" /> 看不清，点击图片换一张</span>';
	_html +='<div class="verify_text"><span class="tips" style="display:none">请输入验证码。</span><span class="errorinfo Lcfl">&nbsp;</span></div>';
	_html +='</td>';

	_html +='</tr>';
	_html +='<tr>';
	_html +='<th></th>';
	_html +='<td height="40" id="_loadingLoin"><a class="btn btn_important" id="login" ><span >登 录</span></a> &nbsp;&nbsp;&nbsp;&nbsp;<a target="_blank" href="'+consts('cas')+'/CASServer/custom/showgetPwd.do?service=' + consts('act') +'/User/login.shtml">找回密码？</a></td>';
	_html +='</tr>';
	_html +='<tr>';
	_html +='<th></th>';
	_html +='<td height="40" id="_logingText" style="display:none;"><span>正在登录......</span></td>';
	_html +='</tr>';
	_html +='<tr>';
	_html +='<td colspan="2">';
	_html +='<div class="login_surport">或者使用合作网站登录：<p>';
	_html +=' <a class="icon icon_alipay" href="'+consts('act')+'/User/alipayLogin">支付宝</a> |';
	_html +=' <a class="icon icon_qq" href="'+consts('act')+'/UnionLogin?platform=qqopen&return_url=' + window.location.href + '">QQ</a> |';
	_html +=' <a class="icon icon_weibo" href="'+consts('act')+'/UnionLogin?platform=sina&return_url=' + window.location.href + '">新浪微博</a>';
	//_html +=' <a class="icon icon_renren" href="'+consts('act')+'/UnionLogin?platform=renren&return_url=' + window.location.href + '">人人网</a>';
	_html +='</p></div>';
	_html +='</td>';
	_html +='</tr>';
	_html +='</table>';
	_html +='</form>';
	_html +='</div>';


	//用户注册表单
	_html +='<div class="tab_con" id="pop_register_form" style="display:none;">';
	_html +='<form id="register_form" action="/User/register/" method="post">';
	_html +='<table border="0" cellpadding="0" cellspacing="0">';
	_html +='<tr>';
	_html +='<th>用户名：</th>';
	_html +='<td><input type="hidden" name="type" value="register">';
	_html +='<input type="text" class="text login_text" maxlength="20" name="user_id2" id="luserid"/>';
	_html +='<div class="verify_text"><span class="tips" style="display:none">5-20个字符，推荐使用中文会员名，注册后不能修改。</span><span class="errorinfo Lcfl">&nbsp;</span></div>';
	_html +='</td>';
	_html +='</tr>';
	_html +='<tr>';
	_html +='<th>登录密码：</th>';
	_html +='<td>';
	_html +='<input type="password" class="text login_text" maxlength="16" name="password" id="password_register_form"/>';
	_html +='<div class="verify_text"><span class="tips" style="display:none">6-16个字符，请使用字母加数字的组合密码。</span><span class="errorinfo Lcfl">&nbsp;</span></div>';
	_html +='</td>';
	_html +='</tr>';
	_html +='<tr>';
	_html +='<th>确认密码：</th>';
	_html +='<td>';
	_html +='<input type="password" class="text login_text" name="repassword" maxlength="16"/>';
	_html +='<div class="verify_text"><span class="tips" style="display:none">请再次输入登录密码。</span><span class="errorinfo Lcfl">&nbsp;</span></div>';
	_html +='</td>';
	_html +='</tr>';
	_html +='<tr>';
	_html +='<th>邮箱：</th>';
	_html +='<td>';
	_html +='<input type="text" class="text login_text" name="email2"/>';
	_html +='<div class="verify_text"><span class="tips" style="display:none">请输入您的邮箱。</span><span class="errorinfo Lcfl">&nbsp;</span></div>';
	_html +='</td>';
	_html +='</tr>';
	_html +='<tr>';
	_html +='<th>验证码：</th>';
	_html +='<td>';
	_html +='<input type="text" name="checknumber" class="text login_text_small"/> <span><img width="50" height="22px" alt="点击更换验证码" class="yanzhengma"  id="register_box_vcode"style="cursor: pointer; vertical-align:top;" onclick="validPic(this)" name="vcode" src="" /> 看不清，点击图片换一张</span>';
	_html +='<div class="verify_text"><span class="tips" style="display:none">请输入验证码。</span><span class="errorinfo Lcfl">&nbsp;</span></div>';
	_html +='</td>';
	_html +='</tr>';
	_html +='<tr>';
	_html +='<th></th>';
	_html +='<td>';
	_html +='<input type="checkbox" id="deal_check" name="deal_check" value="1" checked="checked" /> <label for="checkbox_u2">我已阅读并同意《<a href="'+consts('domain')+'/b/xinszn/201107/1321712_1.shtml" target="_blank">用户服务协议</a>》</label>';
	_html +='<div class="verify_text"></div>';
	_html +='</td>';
	_html +='</tr>';
	_html +='<tr>';
	_html +='<th></th>';
	_html +='<td id="_registering"><a  class="btn btn_important"  id="register"><span>注 册</span></a></td>';
	_html +='</tr>';
	_html +='<tr>';
	_html +='<th></th>';
	_html +='<td id="_registeringText" style="display:none;"><span>注册中....</span></td>';
	_html +='</tr>';
	_html +='</table>';
	_html +='</form>';
	_html +='</div>';
	_html +='</div>';
	_html +='</div>';

	$("#pop_content .pop_content_inner").html(_html);

	$.getJSON(consts('act')+'/User/quick_register_token?callback=?',function (_data) {
		$('#token_register').val(_data.token_register);
	});
    fromvalidate($("#login_form"),consts('act')+"/User/asynclogin",Request,boxResponse,".errorinfo");//表单A验证提交
    fromvalidate($("#register_form"),consts('act')+"/User/register",Request,boxResponse,".errorinfo");//表单B验证提交

	validPic ($(".yanzhengma"));//初始化验证码
	fromsubbind("#login_form","#login");//登录表单提交
	fromsubbind("#register_form","#register");//注册表单提交
	shinfo($("#register_form"),".errorinfo",".tips");//注册表单报错信息
	shinfo($("#login_form"),".errorinfo",".tips");//登录表单报错信息

	$('#tablist_1>div').each(function(){
		$(this).find('>div').hide().eq(0).show();
		$(this).find('li').eq(0).addClass("current");
		$(this).find('li').each(function(i){
			$(this).click(function(){
				$(this).siblings().removeClass("current");
				$(this).addClass("current");
				$(this).parent().parent().find('>div').hide().eq(i).show();
			});
		});
	});

}

function pop_cancel_order(order_sn) {
	_common_box('您确定要取消订单吗？','');
	var _html = "";
		_html += '<div>我们想知道您为何取消此订单，以便改进我们的服务：</div>';
		_html += '<form action="/MemberTrade/cancelOrder" method="GET">';
		_html += '<input type="hidden" name="orderSn" value="' + order_sn + '" />';
		_html += '<table cellspacing="0" cellpadding="0" border="0" class="recallOrder">';
		_html += '<tr>';
		_html += '<td><label><input type="radio" name="cancel_reason" value="现在不想购买" />现在不想购买</label></td>';
		_html += '<td><label><input type="radio" name="cancel_reason" value="支付不成功" />支付不成功</label></td>';
		_html += '</tr>';
		_html += '<tr>';
		_html += '<td><label><input type="radio" name="cancel_reason" value="商品价格较贵" />商品价格较贵</label></td>';
		_html += '<td><label><input type="radio" name="cancel_reason" value="更换或添加新商品" />更换或添加新商品</label></td>';
		_html += '</tr>';
		_html += '<tr>';
		_html += '<td><label><input type="radio" name="cancel_reason" value="错误或重复下单" />错误或重复下单</label></td>';
		_html += '<td><label><input type="radio" name="cancel_reason" value="其他原因" />其他原因</label></td>';
		_html += '</tr>';
		_html += '</table>';
		_html += '<div class="recallOrderButton"><input id="cancel_order_subbtn" type="button" value="提交" /><input id="pop_cancel_order_close_btn" type="button" value="关闭"/></div>';
		_html += '</form>';
	$('#pop_content .pop_content_inner').html(_html);
	$("#pop_content .pop_content_inner #pop_cancel_order_close_btn").unbind('click');
	$("#pop_content .pop_content_inner #pop_cancel_order_close_btn").bind('click', close_pop_window);
	$("#pop_content .pop_content_inner #cancel_order_subbtn").bind('click', function(){
		var cancel_reason = '';
		$("input[name='cancel_reason']").each(function() {
			if(this.checked) {
				cancel_reason = this.value;
			}
		});
		$.get('/MemberTrade/cancelOrder', {'orderSn': order_sn, 'cancel_reason': cancel_reason}, function(result){
			if(result.status==1){
				window.location.reload();
			}else{
				alert(result.message);
			}
		}, 'json');
	});
}

/**
+----------------------------------------------------------
* 计划任务脚本
+----------------------------------------------------------
*/
function getTask()
{
//   if($('#_info_s_f').html()!='message')
//   {
		//获得券卡相关
		$.get(consts('act')+'/Ajax/message?time='+Math.random()+'&callback=?',function(responseText, statusText){
			if(responseText!=''){
				$.messager.lays(280, 180);
				$.messager.anim('fade', 1000);
				$.messager.show("提示信息", responseText,15000);
			}
		},'json')

//   }
}

function _clear_cookie(type)
{
    jQuery.getJSON(consts('act')+'/Ajax/clearCookie?type='+type+'&callback=?',function (_data)
    {
    });
}

/**
+----------------------------------------------------------
* 计划任务弹出框js插件
+----------------------------------------------------------
*/
(function(){
	var ua=navigator.userAgent.toLowerCase();
	var is=(ua.match(/\b(chrome|opera|safari|msie|firefox)\b/) || ['','mozilla'])[1];
	var r='(?:'+is+'|version)[\\/: ]([\\d.]+)';
	var v=(ua.match(new RegExp(r)) ||[])[1];
	jQuery.browser.is=is;
	jQuery.browser.ver=v;
	jQuery.browser[is]=true;
})();
(function (jQuery){
/*
 * jQuery Plugin - Messager
 * Author: corrie	Mail: corrie@sina.com	Homepage: www.corrie.net.cn
 * Copyright (c) 2008 corrie.net.cn
 * @license http://www.gnu.org/licenses/gpl.html [GNU General Public License]
 *
 * $Date: 2008-12-26
 * $Vesion: 1.4
 @ how to use and example: Please Open demo.html
 */
	this.version = '@1.3';
	this.layer = {'width' : 200, 'height': 100};
	this.title = '信息提示';
	this.time = 4000;
	this.anims = {'type' : 'slide', 'speed' : 600};
	this.timer1 = null;
	this.inits = function(title, text){
		if($("#message").is("div")){ return; }
		var topHeight = document.documentElement.scrollTop + document.documentElement.clientHeight - this.layer.height-2;
		var _html = '<div id="message" style="background-color:#FFF;border:#CCC 1px solid;z-index:100;width:'+(this.layer.width+10)+'px;height:'+(this.layer.height+10)+'px; display:none; overflow:hidden; position:fixed; right:0; bottom:0; _position:absolute; _top: expression(window.status = ((document.documentElement.scrollTop || document.body.scrollTop)+ (document.documentElement.clientHeight || document.body.clientHeight)-'+(this.layer.height+12)+'+\'px\'));">';
				_html += '<div style="border:1px solid #fff;border-bottom:none;width:100%;height:25px;font-size:12px;overflow:hidden;color:#666;font-weight:bold;background:#F1F1F1;">';
					_html += '<span id="message_close" style="float:right;width:16px;line-height:22px;color:#999;font-size:12px;font-weight:bold;text-align:center;cursor:pointer;overflow:hidden;">×</span>';
					_html += '<div style="width:100px;line-height:22px;text-align:left;overflow:hidden;text-indent:5px;">'+title+'</div>';
					_html += '<div style="clear:both;"></div>';
				_html += '</div>';
				//_html += '<div style="border:1px solid #fff;border-top:none;width:100%;height:auto;font-size:12px;background-color:#FFF;">';
					_html += '<div id="message_content" style="border-top:1px solid #CCC;font-size:12px;width:'+(this.layer.width)+'px;height:'+(this.layer.height-28)+'px;color:#333;line-height:20px;padding:5px;text-align:left;overflow-y:auto;">'+text+'</div>';
				//_html += '</div>';
			_html += '</div>';
		$(document.body).prepend(_html);

		$("#message_close").click(function(){
			setTimeout('this.close()', 1);
		});
		$("#message").hover(function(){
			clearTimeout(timer1);
			timer1 = null;
		},function(){
			timer1 = setTimeout('this.close()', time);
			//alert(timer1);
		});
	};
	this.show = function(title, text, time){
		if($("#message").is("div")){ return; }
		if(title==0 || !title)title = this.title;
		this.inits(title, text);
		if(time>=0)this.time = time;

		switch(this.anims.type){
			case 'slide':$("#message").slideDown(this.anims.speed);break;
			case 'fade':$("#message").fadeIn(this.anims.speed);break;
			case 'show':$("#message").show(this.anims.speed);break;
			default:$("#message").slideDown(this.anims.speed);break;
		}
		if($.browser.is=='chrome'){
			setTimeout(function(){
				$("#message").remove();
				this.inits(title, text);
				$("#message").css("display","block");
			},this.anims.speed-(this.anims.speed/5));
		}
		//$("#message").slideDown('slow');
		this.rmmessage(this.time);
	};
	this.lays = function(width, height){
		if($("#message").is("div")){ return; }
		if(width!=0 && width)this.layer.width = width;
		if(height!=0 && height)this.layer.height = height;
	}
	this.anim = function(type,speed){
		if($("#message").is("div")){ return; }
		if(type!=0 && type)this.anims.type = type;
		if(speed!=0 && speed){
			switch(speed){
				case 'slow' : ;break;
				case 'fast' : this.anims.speed = 200; break;
				case 'normal' : this.anims.speed = 400; break;
				default:
					this.anims.speed = speed;
			}
		}
	}
	this.rmmessage = function(time){
		if(time>0){
			timer1 = setTimeout('this.close()', time);
			//setTimeout('$("#message").remove()', time+1000);
		}
	};
	this.close = function(){
		switch(this.anims.type){
			case 'slide':$("#message").slideUp(this.anims.speed);break;
			case 'fade':$("#message").fadeOut(this.anims.speed);break;
			case 'show':$("#message").hide(this.anims.speed);break;
			default:$("#message").slideUp(this.anims.speed);break;
		};
		setTimeout('$("#message").remove();', this.anims.speed);
		this.original();
	}
	this.original = function(){
		this.layer = {'width' : 200, 'height': 100};
		this.title = '信息提示';
		this.time = 4000;
		this.anims = {'type' : 'slide', 'speed' : 600};
	};
    jQuery.messager = this;
    return jQuery;
})(jQuery);

//AJAX颜色尺寸切换 选择color获取size 选择size获取color颜色或尺寸代码颜色或尺寸名
function newchoose(type,code,name,r_code,goods_sn,pos){
    if(type=='color' && code == $("#"+pos+"_color_code").val()){
        $("#"+pos+"_color_code").val('');
        newchoosecancel(goods_sn,pos);
        return;
    }else if(type=='size' && code == $("#"+pos+"_size_code").val()){
        $("#"+pos+"_size_code").val('');
        newchoosecancel(goods_sn,pos);
        return;
    }
    var params={type:type,code:code,r_code:r_code,goods_sn:goods_sn};
    var current_code=(type=='color')?$("#color_code").val():$("#size_code").val();
    $.getJSON( consts('act')+"/Ajax/cartAjax?time="+Math.random()+"&callback=?&ajaxtype=color_size",params,function(data,textStatus){
		$("#vip_price").html(data.goodsInfo.vip);
		$("#svip_price").html(data.goodsInfo.svip);
		$("#sale_price").html('¥'+data.goodsInfo.sale_price);
		$("#staff_price_1").html('');
		( data.goodsInfo.staff > 0 ) ? $("#staff_price_2").html('员工价：¥'+data.goodsInfo.staff) : $("#staff_price_2").html('');
        if(type=='color'){
            $("#"+pos+"_sizelist").empty();
            $(data.list).each(function(){
                var cla='';
                var clb="class='selected_b'";
                if (this.available == 0){
                    $("#"+pos+"_sizelist").append("<a id='"+pos+"_size_"+this.size_code+"' "+clb+" style=\'cursor:not-allowed\' >"+this.size_name+"</a>");
                }else{
                    if($("#"+pos+"_size_code").val()==this.size_code){
                        cla="class='selected'";
                    }
                    $("#"+pos+"_sizelist").append("<a id='"+pos+"_size_"+this.size_code+"' "+cla+" style=\'cursor:pointer\' onclick=\"newchoose('size','"+this.size_code+"','"+this.size_name+"','"+code+"','"+goods_sn+"','"+pos+"')\" >"+this.size_name+"</a>");
                }
            });
                $("#"+pos+"_current_color").html(name);
                $("#"+pos+"_color_code").val(code);
                $("#"+pos+"_scb_"+code).css({'display':'block'});
                $("#"+pos+"_colorlist").find("a").removeClass("selected");
                $("#"+pos+"_color_"+code).addClass('selected');
                //库存显示
                avl_str=data.avl_num>0?"(库存剩余  "+data.avl_num+" 件)":"(无库存)";
                $('#clean_avl_info').hide();
                $("#"+pos+"_avl_num").html(avl_str);
                if(data.avl_num>0 && data.avl_num<=3){
                    $('#clean_avl_info').show();
                }
                $("#stringToken").val(data.stringToken);
        }else{
            $("#"+pos+"_colorlist").empty();
            $(data.list).each(function(){
                var cla='';
                var clb="class='selected_b'";
                var dis="none";
                if (this.available == 0){
                    var str="<li><a id='"+pos+"_color_"+this.color_code+"' "+clb+"  style=\'cursor:not-allowed\'>";
                    str += "<img  title='"+this.color_name+"' src='"+this.thumb_url_28+"' class='prodimg' />";
                    str += "</a></li>";
                    $("#"+pos+"_colorlist").append(str);
                }else{
                    if($("#"+pos+"_color_code").val()==this.color_code){
                        cla="class='selected'";
                        dis="block";
                    }
                    var str="<li><a id='"+pos+"_color_"+this.color_code+"' "+cla+"  style=\'cursor:pointer\' onclick=\"newchoose('color','"+this.color_code+"','"+this.color_name+"','"+code+"','"+goods_sn+"','"+pos+"');changeImg('#current_img','"+this.thumb_url+"','"+this.thumb_url_498+"','"+this.thumb_url_730+"',1)\" >";
                    str += "<img  title='"+this.color_name+"' src='"+this.thumb_url_28+"' class='prodimg' />";
                    str +="</a></li>";
                    $("#"+pos+"_colorlist").append(str);
                }
            });
            $("#"+pos+"_current_size").html(name);
            $("#"+pos+"_size_code").val(code);
            $("#stringToken").val(data.stringToken);
            $("#"+pos+"_sizelist").find("a").removeClass("selected");
            $("#"+pos+"_size_"+code).addClass('selected');
            //库存显示
            avl_str=data.avl_num>0?"(库存剩余  "+data.avl_num+" 件)":"(无库存)";
            $("#"+pos+"_avl_num").html(avl_str);
            if(data.avl_num>0 && data.avl_num<=3){
				showError();
				$("#hasInventory").text('库存已不足3件，请下单后立即付款。');
            }
        }
	 });
}
function newchoosecancel(goods_sn,pos){
    var color_code=$("#"+pos+"_color_code").val();
    var size_code=$("#"+pos+"_size_code").val();
    var params={type:'color_size',color_code:color_code,size_code:size_code,goods_sn:goods_sn};
    $.getJSON( consts('act')+"/Ajax/cartAjax?time="+Math.random()+"&callback=?&ajaxtype=color_size",params,function(data,textStatus){
		$("#vip_price").html(data.goodsInfo.vip);
		$("#svip_price").html(data.goodsInfo.svip);
		$("#sale_price").html('¥'+data.goodsInfo.sale_price);
		$("#staff_price_1").html('');
		( data.goodsInfo.staff > 0 ) ? $("#staff_price_2").html('员工价：¥'+data.goodsInfo.staff) : $("#staff_price_2").html('');
       $("#"+pos+"_sizelist").empty();
        $(data['size_list']).each(function(){
            var cla='';
            var clb="class='selected_b'";
            if (this.available == 0){
                $("#"+pos+"_sizelist").append("<a id='"+pos+"_size_"+this.size_code+"' "+clb+" style=\'cursor:not-allowed\' >"+this.size_name+"</a>");
            }else{
                if($("#"+pos+"_size_code").val()==this.size_code){
                    cla="class='selected'";
                }
                $("#"+pos+"_sizelist").append("<a id='"+pos+"_size_"+this.size_code+"' "+cla+" style=\'cursor:pointer\' onclick=\"newchoose('size','"+this.size_code+"','"+this.size_name+"','"+color_code+"','"+goods_sn+"','"+pos+"')\" >"+this.size_name+"</a>");
            }
        });
        $("#"+pos+"_colorlist").empty();
	    $(data['color_list']).each(function(){
            var cla='';
            var clb="class='selected_b'";
            var dis="none";
            if (this.available == 0){
                var str="<li><a id='"+pos+"_color_"+this.color_code+"' "+clb+"  style=\'cursor:not-allowed\'>";
                str += "<img  title='"+this.color_name+"' src='"+this.thumb_url_28+"' class='prodimg' />";
                str +="</a></li>";
                $("#"+pos+"_colorlist").append(str);
            }else{
                if($("#"+pos+"_color_code").val()==this.color_code){
                    cla="class='selected'";
                    dis="block";
                }
                var str="<li><a id='"+pos+"_color_"+this.color_code+"' "+cla+"  style=\'cursor:pointer\' onclick=\"newchoose('color','"+this.color_code+"','"+this.color_name+"','"+size_code+"','"+goods_sn+"','"+pos+"');changeImg('#current_img','"+this.thumb_url+"','"+this.thumb_url_498+"','"+this.thumb_url_730+"',1)\" >";
                str += "<img  title='"+this.color_name+"' src='"+this.thumb_url_28+"' class='prodimg' />";
                str +="</a></li>";
                $("#"+pos+"_colorlist").append(str);
            }
		});
        //库存显示
        avl_str=data.avl_num>0?"(库存剩余  "+data.avl_num+" 件)":"(无库存)";
        $('#clean_avl_info').hide();
        $("#"+pos+"_avl_num").html(avl_str);
        if(data.avl_num>0 && data.avl_num<=3){
            $('#clean_avl_info').show();
        }
        if(color_code == '') $("#"+pos+"_current_color").html('请选择颜色');
        if(size_code == '') $("#"+pos+"_current_size").html('请选择尺码');
        $("#stringToken").val(data.stringToken);
    });
}
//改变图片
function changeImg(id,saveurl,url,jqimgurl,status)
{
    if(status == 1)
    {
        $("#img_url").val(saveurl);
    }
    $(id).attr('jqimg',jqimgurl);
    $("#product_big_image").attr('href',jqimgurl);
    $(id).attr('src',url);
}
// AJAX表单提交（添加购物车）
function asubmit(extension_code) {
    var options = {success:showResponse,url:consts('act')+"/Cart/cartAjax?time="+Math.random()+"&callback=?&type=add",type:'get',dataType:'json'};
    $("#form_buy").ajaxSubmit(options);
}
//请求后
function showResponse(responseText, statusText) {
	if(responseText.error != 0) {
		alert(responseText.mess);
		return;
	}
	if(responseText.error == 8) {
		_common_box('请您登录后继续刚才的操作');
		pop_login(0,'');
	}
	_BuyNumJson();
	if(responseText.location_page=='header_box_gift') {
		close_pop_window();
		_refresh_cart();
	} else {
		jQuery.getJSON(consts('act')+"/Cart/getCartInfo?time="+Math.random()+"&callback=?",function(_data) {
			if(_data.status=='1') {
				$('#open_num_tip').html(_data.goodsNumber);
				$('#open_money_tip').html(_data.sum);
			}
		})
		$("#light_box").show();
	}
	//if(responseText.location_page!='read')
	//{
		//$("#mask").css({'display':'none'});
		//$("#set_info_1").css({'display':'none'});
		//$("#ad_float_table").css({'width':'0px'});
	//}
}


function showError(){
	$("#hasInventory").fadeIn("slow");
	setTimeout(function(){
		$("#hasInventory").fadeOut("fast");
	},3000)
}
 //关闭弹窗
var buyBag_close = function(){jQuery('#light_box').hide();};
//只能输入数字
function checknum()
{
    $("#goods_number").keydown(function (event)
    {
        if(((event.keyCode > 47) && (event.keyCode < 58)) ||
        (event.keyCode == 8)|| ((event.keyCode > 95) && (event.keyCode < 106)) )
        {
            return true;
        }
        else
        {
            return false;
        }
    })
}

/**
+----------------------------------------------------------
* 是否喜欢
+----------------------------------------------------------
*/
function islikenew(goods_sn, code){
	jQuery.getJSON(consts('act')+'/Goods/isLikeNewGoods?callback=?', {goods_sn:goods_sn,code:code,type:1},function(jsondata) {
		switch(jsondata.code) {
			case '3':
				_common_box('请您登录后继续刚才操作');
				pop_login(1,'');
				break;
			case '2':
				alert(jsondata.msg);
				break;
			case '1':
				alert(jsondata.msg);
				if(code == 1) {
					$("#link1").html(parseInt($("#link1").html()) + 1);
				} else {
					$("#link2").html(parseInt($("#link2").html()) + 1);
				}
				break;
		}
	});
}

//签到送积分
function sing_in() {
	$.getJSON(consts('act')+'/Ajax/sing_in/?callback=?', function(data) {
		if(data.code == -1) {
			 _common_box('请您登录后继续刚才的操作');
             pop_login(1,'');
		} else if(data.code == 1 || data.code == 2) {
			var _html = '';
			_html += '<div id="pop_window" style="width:520px; margin-left:-260px;">';
			_html += '<table cellspacing="0" cellpadding="0" border="0">';
			_html += '<table cellspacing="0" cellpadding="0" border="0"><tbody>';
			_html += '<tr><td class="pop_tl"></td><td class="pop_tc"></td><td class="pop_tr"></td></tr>';
			_html += '<tr><td class="pop_cl"></td><td class="pop_cc"><div id="pop_header"><span>签到领积分</span><em class="btn btn_close" onclick="close_pop_window();">关闭</em></div><div id="pop_content" style="width:508px;">';
			_html += '<div id="signBox"><div class="signTitle">';
			if(data.code == 1) {
				_html += '<h3>今天已签到，请明天再来吧！</h3>';
			} else if(data.code == 2) {
				_html += '<h3><em class="icon icon_sign_success"></em>签到成功，<span class="brown">积分</span>+' + data.jifen + '</h3>';
			}
			_html += '</div><div class="signScore">';
			_html += '<img src="http://s.mb-go.com/pub6/style/images/' + data.level_pic + '" class="signScoreAvatar" />';
			_html += '<h4>' + data.user_id + '</h4>';
			_html += '<p class="red">总积分：' + data.pay_points + '</p>';
			_html += '<p><a href="' + consts('member') + '/MemberInfo/sign">查看签到记录&gt;&gt;</a></p>';
			_html += '<div class="signScoreTips"><span class="mr20">已连续领取' + data.series_days + '天</span><span class="red">明天可领' + data.tomorrow_jifen + '积分</span><div class="notice">连续领取每天增加1积分<br/>连续7天以上每天7积分<br/>如中断，则又从1积分开始<em class="icon tipArrow"></em></div></div></div>';
			_html += '<div class="signQuests" style="width:166px"><h3 class="icon signQuestsHd">做任务赢积分</h3><div class="signQuestsBd"><ul class="list">';

			if(data.ischeckweibo != 3 || data.ischeckemail != 1 || data.ischeckmobile != 1) {
				if(data.ischeckemail != 1) {
					_html += '<li><a href="' + consts('member') + '/MemberInfo/checkEmail" class="icon" target="_blank">验证邮箱可获得20积分</a></li>';
				}
				if(data.ischeckmobile != 1) {
					_html += '<li><a href="' + consts('member') + '/MemberInfo/checkMobile" class="icon" target="_blank">验证手机可获得20积分</a></li>';
				}
				if(data.ischeckweibo != 3) {
					if(data.ischeckweibo != 2) {
						_html += '<li><a href="' + consts('member') + '/MemberInfo/weiboLogin/type/tx" class="icon" target="_blank">绑定腾讯微博可获得10积分</a></li>';
					}
					if(data.ischeckweibo != 1) {
						_html += '<li><a href="' + consts('member') + '/MemberInfo/weiboLogin/type/xl" class="icon" target="_blank">绑定新浪微博可获得10积分</a></li>';
					}
				}
			} else {
				_html += '<li>暂时没有任务！</li>';
			}

			_html += '</ul></div></div>';
			_html += '<div class="signPromotion"><h3 class="signPromotionHd"><span>邦购近期活动</span></h3><div class="signPromotionBd"><ul class="list">';
			_html += data.news_str;
			_html += '</ul></div></div></div></div>';
			_html += '</td><td class="pop_cr"></td></tr><tr><td class="pop_bl"></td><td class="pop_bc"></td><td class="pop_br"></td></tr></tbody></table></div>';
			_html +='<div id="pop_overlay" class="pop_overlay"><iframe src="" frameborder="0" style="width:100%; height:100%; opacity:0; filter:alpha(opacity=0)"></iframe></div>';
	        _html +='<div id="pop_load"></div>';
			$("body").append(_html);
		}

		$(".signScoreTips").live('mouseover',function(){
			$(this).addClass("hover")
		}).live("mouseout", function(){
			$(this).removeClass("hover")
		});
	});
}


//删除左右两端的空格
function changeImgselected(obj)
{
    $(".imagelist").find('li').removeClass();
    $(".list-h").find('span').removeClass();
    $(obj).addClass("selected");
}

var sess_id='';
var user_id=''
//头部检测验证CAS
function _checkCAS(auth,cart)
{
	var _top  = '';
	var _user = '';

	_top += '<a href="'+consts('act')+ '/User/login.shtml?return_url='+bg.utils.URLEncode(window.location.href)+'" class="user_act">登录</a>';
	_top += '<a href="'+consts('cas')+'/CASServer/custom/registryPage.do?service='+consts('act')+'/User/casregister.shtml" class="user_act">注册</a>';
	jQuery('#_topLogin').html(_top);
	jQuery('#_topUser').html(_user);
	//验证用户登录
		var func='cas';
		if(auth!=''){
			func+='|auth';
		}
		if(cart!=''){
			//func +='|cart';
			showCartNumber();
		}

		$.getJSON( consts('act')+'/Ajax/load/func/'+func+'?callback=?&gateway=ture',function (_ajax) {
			if(_ajax.auth!=null){
				showlogin(_ajax.auth);
				//_loginJsonp(_ajax.auth);
			}

			if(_ajax.cart!=null){
				_BuyNumJson(_ajax.cart);
			}
			_ajax.auth.status=='1' ? taskManager() : '';
		});

	//$.getJSON(consts('cas')+'/CASServer/login?service='+consts('act')+'/User/checkCAS.shtml?callback=?&gateway=ture',function (_ajax) {
	//	_loginJsonp();
	//});
}

//头部检测会员是否登录
function _loginJsonp(user_data, comeFrom) {
    var user_data;

    if (user_data == null || user_data == 'undefined') {
        $.getJSON(consts('act') + '/Ajax/checkLogin?callback=?',
        function(_data) {
            showlogin(_data);
        });
    } else {
        showlogin(user_data);
    }
}
//显示登录成功后
function showlogin(user_data) {
    sess_id = user_data.sess_id;

    if (user_data.status == '1') {
        user_id = user_data.userid;
        var _top  = '';
        var _user = '';
        _top  += '<a onclick="bg.common.logout()" style="cursor:pointer;" title="点击退出登录" class="user_act">退出</a>';
        _user += '<a href="' + consts('member') + '/Member/index.shtml" title="点击进入用户中心" class="user_name">' + user_data.userid + '</a>';
        jQuery('#_topLogin').html(_top);
        jQuery('#_topUser').html(_user);
    }

}
//购物袋商品列表
function _BuyNumJson(cart_data)
{
	if(cart_data==null||cart_data=='undefined'){
		jQuery.getJSON(consts('act')+'/Cart/getCartInfo?callback=?',{'ajax' : true},function(_data){
		   showcart(_data);
		});
	}else{
		  showcart(cart_data);
	}
}

//获取购物袋内商品总数
function showCartNumber(){
	jQuery.getJSON(consts('act')+'/Cart/getCartInfo?callback=?',{'ajax' : false},function(_data){
		jQuery('#showGoodsNum').html(_data.goodsNumber);
	});
}

function showcart(cart_data) {
    var _html = '';
    if (cart_data.status == '1') {
        var data = cart_data.cart;
        var _numHtml = 0;
        _html += '<div class="inner">';
        _html += '<ul class="goods_list">'
        for (var i = 0 in data) {        
            _html += '<li>';
            _html += '<a href="' + data[i]['gUrl'] + '" target="_blank">';
            _html += '<img src="' + data[i]['img_src'] + '" alt="' + data[i]['goods_name'] + '" title="' + data[i]['goods_name'] + '" width="52" height="56" /></dt>';
            _html += '<h4>' + data[i]['goods_name'] + '</h4>';
            _html += '<strong>¥' + data[i]['goods_price'] + ' x ' + data[i]['goods_number'] + '</strong>';
            _html += '</a>';
            _html += '</li>';
        }
        _html += '</ul>';
		_html += '<div class="shopping_price"><span class="left">共计：<strong>¥' + cart_data.sum + '</strong></span><a href="' + consts('act') + '/Cart.shtml" target="_blank" class="btn btn_common_small"><span>去结算</span></a></div>';
        _html += '</div>';

        jQuery('#shopping_show').html(_html);
        jQuery('#showGoodsNum').html(cart_data.goodsNumber);
    } else {
        var _numHtml = 0;

        jQuery('#shopping_show').html(_html);
        jQuery('#showGoodsNum').html(cart_data.goodsNumber);
    }
}

//计划任务
function taskManager() {
	$.ajax({
		type: "GET",
		url: consts('act')+"/Ajax/taskMessage?time="+Math.random()+"&callback=?",
		dataType :"jsonp",
		cache :"false",
		success : function(data,textStatus) {
			if(data.status == 1){
				$.messager.lays(280, 180);
				$.messager.anim('fade', 1000);
				$.messager.show('提示信息',data.task_msg,15000);
			}
		},
		error:function(){
		}
	});
}

/*******分页 - 判断直接填写跳转页码是否为空、是否为数字********/
function isValid(form){
	if( form.cp.value == '' || isNaN(form.cp.value) || parseInt(form.cp.value) > parseInt($(".pageNum").last().attr("page")) || form.cp.value <= 0 ){
		alert("请正确填写数字!");
		return false;
	}
	return true;
}
//公共的弹出层背景
function _common_box_pay(title,_close)
{
    var btn_close = _close ? '<em class="btn btn_close" onclick="close_pop_window()">关闭</em>' :'';
    $("body","html").css({height: "100%", width: "100%"});
    var _html = "";
        _html +='<div id="pop_window"><table border="0" cellpadding="0" cellspacing="0">';
        _html +='<tr><td class="pop_tl"></td><td class="pop_tc"></td><td class="pop_tr"></td></tr>';
        _html +='<tr>';
        _html +='<td class="pop_cl"></td>';
        _html +='<td class="pop_cc">';
        _html +='<div id="pop_header"><span>'+title+'</span>'+btn_close+'</div>';
        _html +='<div id="pop_content"><div class="pop_content_inner"></div></div>';
        _html +='</td>';
        _html +='<td class="pop_cr"></td>';
        _html +='</tr>';
        _html +='<tr><td class="pop_bl"></td><td class="pop_bc"></td><td class="pop_br"></td></tr>';
        _html +='</table></div>';
        _html +='<div id="pop_overlay" class="pop_overlay"></div>';
        _html +='<div id="pop_load"></div>';
        $("body").append(_html);
       // $("#pop_header .btn_close, #pop_overlay").click(close_pop_window);
        $("#pop_header .btn_close, #pop_overlay");
}

	

//获取天气信息
function getWeather(){
	$.getJSON(consts('act')+"/Weather/getWeather?callback=?", function(data){
		$("#weatherPanelHolder").html(data['content']);
	});
}

//地区数组
var area = {
	"北京":{"name":"北京","city":{"36":"北京"}},
	"天津":{"name":"天津","city":{"37":"天津"}},
	"河北":{"name":"河北","city":{"38":"石家庄","39":"唐山","40":"秦皇岛","41":"邯郸","42":"邢台","43":"保定","44":"张家口","45":"承德","46":"沧州","47":"廊坊","48":"衡水"}},
	"山西":{"name":"山西","city":{"49":"太原","50":"大同","51":"阳泉","52":"长治","53":"晋城","54":"朔州","55":"忻州","56":"吕梁","57":"晋中","58":"临汾","59":"运城"}},
	"内蒙古":{"name":"内蒙古","city":{"60":"呼和浩特","61":"包头","62":"乌海","63":"赤峰","64":"呼伦贝尔","65":"兴安盟","66":"通辽","67":"锡林郭勒","68":"乌兰察布","69":"鄂尔多斯","70":"巴彦淖尔","71":"阿拉善盟"}},
	"辽宁":{"name":"辽宁","city":{"72":"沈阳","73":"大连","74":"鞍山","75":"抚顺","76":"本溪","77":"丹东","78":"锦州","79":"营口","80":"阜新","81":"辽阳","82":"盘锦","83":"铁岭","84":"朝阳","85":"葫芦岛"}},
	"吉林":{"name":"吉林","city":{"86":"长春","87":"吉林","88":"四平","89":"辽源","90":"通化","91":"白山","92":"松原","93":"白城","94":"延边"}},
	"黑龙江":{"name":"黑龙江","city":{"95":"哈尔滨","96":"齐齐哈尔","97":"鸡西","98":"鹤岗","99":"双鸭山","100":"大庆","101":"伊春","102":"佳木斯","103":"七台河","104":"牡丹江","105":"黑河","106":"绥化","107":"大兴安岭"}},
	"上海":{"name":"上海","city":{"108":"上海"}},
	"江苏":{"name":"江苏","city":{"109":"南京","110":"无锡","111":"徐州","112":"常州","113":"苏州","114":"南通","115":"连云港","116":"淮安","118":"盐城","119":"扬州","120":"镇江","121":"泰州","122":"宿迁"}},
	"浙江":{"name":"浙江","city":{"123":"杭州","124":"宁波","125":"温州","126":"嘉兴","127":"湖州","128":"绍兴","129":"金华","130":"衢州","131":"舟山","132":"台州","133":"丽水"}},
	"安徽":{"name":"安徽","city":{"134":"合肥","135":"芜湖","136":"蚌埠","137":"淮南","138":"马鞍山","139":"淮北","140":"铜陵","141":"安庆","142":"黄山","143":"滁州","144":"阜阳","145":"亳州","146":"宿州","147":"六安","148":"宣城","149":"巢湖","150":"池州"}},
	"福建":{"name":"福建","city":{"151":"福州","152":"厦门","153":"莆田","154":"三明","155":"泉州","156":"漳州","157":"南平","158":"龙岩","159":"宁德"}},
	"江西":{"name":"江西","city":{"160":"南昌","161":"景德镇","162":"萍乡","163":"九江","164":"新余","165":"鹰潭","166":"赣州","167":"宜春","168":"上饶","169":"吉安","170":"抚州"}},
	"山东":{"name":"山东","city":{"171":"济南","172":"青岛","173":"淄博","174":"枣庄","175":"东营","176":"烟台","177":"潍坊","178":"济宁","179":"泰安","180":"威海","181":"日照","182":"莱芜","183":"临沂","184":"德州","185":"聊城","186":"滨州","187":"菏泽"}},
	"河南":{"name":"河南","city":{"188":"郑州","189":"开封","190":"洛阳","191":"平顶山","192":"安阳","193":"鹤壁","194":"新乡","195":"焦作","196":"济源","197":"濮阳","198":"许昌","199":"漯河","200":"三门峡","201":"南阳","202":"商丘","203":"信阳","204":"周口","205":"驻马店"}},
	"湖北":{"name":"湖北","city":{"206":"武汉","207":"黄石","208":"十堰","209":"宜昌","210":"襄樊","211":"鄂州","212":"荆门","213":"孝感","214":"荆州","215":"黄冈","216":"咸宁","217":"恩施","218":"随州","219":"仙桃","220":"潜江","221":"天门","222":"神农架"}},
	"湖南":{"name":"湖南","city":{"223":"长沙","224":"株洲","225":"湘潭","226":"衡阳","227":"邵阳","228":"岳阳","229":"常德","230":"张家界","231":"益阳","232":"郴州","233":"永州","234":"怀化","235":"娄底","236":"湘西"}},
	"广东":{"name":"广东","city":{"237":"广州","238":"韶关","239":"深圳","240":"珠海","241":"汕头","242":"佛山","243":"江门","244":"湛江","245":"茂名","246":"肇庆","247":"惠州","248":"梅州","249":"汕尾","250":"河源","251":"阳江","252":"清远","253":"东莞","254":"中山","255":"潮州","256":"揭阳","257":"云浮"}},
	"广西":{"name":"广西","city":{"258":"南宁","259":"柳州","260":"桂林","261":"梧州","262":"北海","263":"防城港","264":"钦州","265":"贵港","266":"玉林","267":"崇左","268":"来宾","269":"贺州","270":"百色","271":"河池"}},
	"海南":{"name":"海南","city":{"272":"海口","273":"三亚","274":"通什","275":"琼海","276":"儋州","277":"琼山","278":"文昌","279":"万宁","280":"东方","281":"五指山","282":"定安","283":"屯昌","284":"澄迈","285":"临高","286":"白沙","287":"昌江","288":"乐东","289":"陵水","290":"保亭","291":"琼中","292":"三沙"}},
	"重庆":{"name":"重庆","city":{"293":"重庆"}},
	"四川":{"name":"四川","city":{"294":"成都","295":"自贡","296":"攀枝花","297":"泸州","298":"德阳","299":"绵阳","300":"广元","301":"遂宁","302":"内江","303":"乐山","304":"南充","305":"宜宾","306":"广安","307":"达州","308":"雅安","309":"阿坝","310":"甘孜","311":"凉山","312":"巴中","313":"眉山","314":"资阳"}},
	"贵州":{"name":"贵州","city":{"315":"贵阳","316":"六盘水","317":"遵义","318":"铜仁","319":"黔西南","320":"毕节","321":"安顺","322":"黔东南","323":"黔南"}},
	"云南":{"name":"云南","city":{"324":"昆明","325":"曲靖","326":"玉溪","327":"昭通","328":"楚雄","329":"红河","330":"文山","331":"普洱","332":"西双版纳","333":"大理","334":"保山","335":"德宏","336":"丽江","337":"怒江","338":"迪庆","339":"临沧"}},
	"西藏":{"name":"西藏","city":{"340":"拉萨","341":"昌都","342":"山南","343":"日喀则","344":"那曲","345":"阿里","346":"林芝"}},
	"陕西":{"name":"陕西","city":{"347":"西安","348":"铜川","349":"宝鸡","350":"咸阳","351":"渭南","352":"延安","353":"汉中","354":"安康","355":"商洛","356":"榆林"}},
	"甘肃":{"name":"甘肃","city":{"357":"兰州","358":"嘉峪关","359":"金昌","360":"白银","361":"天水","362":"酒泉","363":"张掖","364":"武威","365":"定西","366":"陇南","367":"平凉","368":"庆阳","369":"临夏","370":"甘南"}},
	"青海":{"name":"青海","city":{"371":"西宁","372":"海东","373":"海北","374":"黄南","375":"海南","376":"果洛","377":"玉树","378":"海西"}},
	"宁夏":{"name":"宁夏","city":{"379":"银川","380":"石嘴山","381":"中卫","382":"吴忠","383":"固原"}},
	"新疆":{"name":"新疆","city":{"384":"乌鲁木齐","385":"克拉玛依","386":"吐鲁番","387":"哈密","388":"昌吉","389":"博尔塔拉","390":"巴音郭楞","391":"阿克苏","392":"克孜勒苏","393":"喀什","394":"和田","395":"伊犁","396":"塔城","397":"阿勒泰","398":"石河子","399":"阿拉尔","400":"图木舒克","401":"五家渠"}},
	"台湾":{"name":"台湾","city":{"403":"台北","404":"台北","405":"苗粟","406":"新竹","407":"高雄","408":"基隆","409":"桃园","410":"南投","411":"彰化","412":"台东","413":"台中","414":"嘉义","415":"屏东","416":"台中","417":"宜兰","418":"台南","419":"台南","420":"花莲","421":"云林","422":"彭湖"}},
	"香港":{"name":"香港","city":{"423":"香港岛","3678":"九龙","3679":"新界"}},
	"澳门":{"name":"澳门","city":{"424":"澳门"}}
}/**
  +----------------------------------------------------------
 * 手机js对象
 +----------------------------------------------------------
 * log			name	date					note
 * @author		lzh		2012/10/26				整理
 +----------------------------------------------------------
 **/
bg.wap = {
	/**
	 +----------------------------------------------------------
	 * wap推广（暂定此代码使用时间为微信wap推广期间）
	 * Author: zhupf 2012-10-23
	 +----------------------------------------------------------
	*/
	'showPromotion': function(){
		var StrUA = navigator.userAgent.toLowerCase();
		var isIDevice = StrUA.match(/iphone/i) || StrUA.match(/ipad/i) || StrUA.match(/android/i);
		if(this.getQueryString('wap_code')!='weixin') return false;
		if(isIDevice!=null){//if he is Mobile Visitor
			// if(getCookie("wapPromotion") !=1 ){//If it is the first visit
				var domain = (document.domain.indexOf("banggo.com") != -1)?".banggo.com":".banggo.tn";
				// setCookie("wapPromotion",1, 0, "/", domain, '');//set cookie
				//redirect to wapPromotion page
				var returnUrl = encodeURIComponent(window.location.href);
				window.location.href = "http://wap"+domain+"/toMobile.jsp?returnUrl="+returnUrl;
			// }
		}
	},
	/**
	 +----------------------------------------------------------
	 * 获取url中的参数
	 * Author: zhupf 2012-10-23
	 +----------------------------------------------------------
	*/
	'getQueryString': function(name) {
		var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
		var r = window.location.search.substr(1).match(reg);
		if (r != null) return unescape(r[2]); return null;
	},
	/**
	+----------------------------------------------------------
	 * Verify whether it is mobile visitors
	 * Author: zhupf 2012-08-15
	 +----------------------------------------------------------
	*/
	'isMobileVisitor': function(){
		var StrUA = navigator.userAgent.toLowerCase();
		var isIDevice = StrUA.match(/iphone/i) || StrUA.match(/ipad/i) || StrUA.match(/android/i);
		if(isIDevice!=null){//if he is Mobile Visitor
			this.ajaxMobileLog('indexDialog','mobilePv');
			//2012-12-12 by zhupf 临时解决关于官网切换模版造成的wap弹窗失效
			if(this.getQueryString('t')!=null && getCookie("isMobileT")!=1 ){
				var domain = (document.domain.indexOf("banggo.com") != -1)?".banggo.com":".banggo.tn";
				setCookie("isMobileT",1, 0, "/", domain, '');//set cookie
				this.actionDialog();
			}
			if(getCookie("isMobile") !=1 && this.getQueryString('t')==null){//If it is the first visit
				//统计弹窗量
				this.ajaxMobileLog('indexDialog','Dialog');
				var domain = (document.domain.indexOf("banggo.com") != -1)?".banggo.com":".banggo.tn";
				setCookie("isMobile",1, 0, "/", domain, '');//set cookie
				//手机WAP Dialog优化
				this.actionDialog();
			}
		}	
	},	
	
	/**
	 +----------------------------------------------------------
	 * actionDialog
	 * Author: zhupf 2012-12-12
	 +----------------------------------------------------------
	*/
	'actionDialog': function(){
		var StrUA = navigator.userAgent.toLowerCase();
		var mobileHtml = '<div id="mobile_notice">';
			mobileHtml+= '	<div class="inner">';
			mobileHtml+= '		<h2>下载邦购商城应用</h2>';
			mobileHtml+= '		<div class="pl10 pr10"><img src="http://s.mb-go.com/pub7/style/images/mobile/download_tips.png" width="95%"/></div>';
			mobileHtml+= '		<div class="pl10 pr10">';
			mobileHtml+= '			<a href="https://itunes.apple.com/us/app/bang-gou-shang-cheng-mei-te/id427543233?mt=8" onclick="bg.wap.ajaxMobileLog(\'indexDialog\',\'download\')" target="_blank"><img src="http://s.mb-go.com/pub7/images/wap/dl_iphone.png" width="80%"/></a>';
			mobileHtml+= '		</div>';
			mobileHtml+= '		<div class="pl10 pr10 mt20">';
			mobileHtml+= '			<a href="https://itunes.apple.com/us/app/bang-gou-shang-cheng/id876806038?mt=8" onclick="bg.wap.ajaxMobileLog(\'indexDialog\',\'download\')" target="_blank"><img src="http://s.mb-go.com/pub7/images/wap/dl_ipad.png" width="80%"/></a>';
			mobileHtml+= '		</div>';
			mobileHtml+= '		<div class="pl10 pr10 mt20">';
			mobileHtml+= '			<a href="http://app.qq.com/#id=detail&appid=1101061470" onclick="bg.wap.ajaxMobileLog(\'indexDialog\',\'download\')" target="_blank"><img src="http://s.mb-go.com/pub7/images/wap/dl_android.png" width="80%"/></a>';
			mobileHtml+= '		</div>';
			mobileHtml+= '		<a href="javascript:;" class="close"><img src="http://s.mb-go.com/pub7/style/images/mobile/download_close.png" width="12%"/></a>';
			mobileHtml+= '	</div>';
			mobileHtml+= '</div>';
			mobileHtml+= '<div id="mobile_overlay"></div>';
		//检查是否是 ipad
		if(!StrUA.match(/ipad/i)){
			// $("#mobile_notice").addClass("ipad");
			$("body").append(mobileHtml);
		}
		$("#mobile_overlay").fadeIn();
		setTimeout(function(){
			$("#mobile_notice").animate({top:"0.5em"},1000);
		},500)
		$("#mobile_notice .close").bind("click", function(){
			$("#mobile_notice").animate({top:"-100em"},1000);
			setTimeout(function(){
				$("#mobile_overlay").fadeOut();
			},1000);	
		});	
	},
	
	/**
	 +----------------------------------------------------------
	 * ajaxMobileLog
	 * Author: zhupf 2012-08-15
	 +----------------------------------------------------------
	*/
	'ajaxMobileLog': function(channel,type){
		if(document.domain.indexOf("banggo.com") != -1) basePath = "http://wap.banggo.com";
		else basePath = "http://10.100.200.6:8080/BGMobileWap_test";
		var params = {
				'channel':channel,
				'type':type
			};
		$.post(basePath+'/ajax/log.do',params);
	}
}


/**
 +----------------------------------------------------------
 * 页面初始化加载函数 
 * Author: lzh 2012/10/25
 +----------------------------------------------------------
 **/
$(document).ready(function() {
	/* wap推广（暂定此代码使用时间为微信wap推广期间） */
    bg.wap.showPromotion();
    /* 移动设备判断 调用 */
    bg.wap.isMobileVisitor();
});
/**
 +----------------------------------------------------------
 * 小插件js对象
 +----------------------------------------------------------
 * log			name	date					note
 * @author		hxl		2012/10/25				整理
 +----------------------------------------------------------
**/
bg.widget = {
	/**
	 +----------------------------------------------------------
	 * 天气插件，网站顶部穿衣指数
	 +----------------------------------------------------------
	 * log			name	        date					note
	 * @author		lizhihua		2013/04/23				开发
	 +----------------------------------------------------------
	**/
	weather: function(){
		var h_weather = $("#top_menu .topWeather");
		var w_panel   = $("#weatherPanel");
		var w_info    = $("#weatherPanel .weather_info");
		var w_set     = $("#weatherPanel .weather_setting");
		var b_set     = $("#weatherPanel .setting-btn");
		var b_ret     = $("#weatherPanel .return-btn");
		var b_cancel  = $("#weatherPanel .pk_btn_cl");
		var w_item    = $("#weatherPanel .weather_item");
		var w_con     = $("#weatherPanel .wether_tip");
		var weatherOnTime;
		
		$(".weather_option").focus(function(){
			$(this).addClass("focus");
		}).blur(function(){
			$(this).removeClass("focus");
		});

		//穿衣指数
		w_item.each(function(i){
			$(this).hover(function(){
				$(this).addClass("active").siblings().removeClass("active");
				w_con.eq(i).addClass("wether_tip_actived").siblings().removeClass("wether_tip_actived");
				$("#weatherPanel .weather_tip_arrow").hide();
				$("#weatherPanel .active .weather_tip_arrow").show();
			});
		});

		//设置城市信息
		var settingShow = function(){
			b_set.hide();
			b_ret.show();
			w_set.show();
		}

		//天气信息列表
		var weatherShow = function(){
			b_ret.hide();
			b_set.show();
			w_set.hide();
		}

		//城市设置
		b_set.click(settingShow);

		//返回
		b_ret.click(weatherShow);

		//取消
		b_cancel.click(weatherShow);

		// 显示天气面板
		h_weather.hover(function(){
			weatherOnTime = setTimeout(function(){
    			h_weather.addClass("active");
    			$("#weatherPanel .weather_tip_arrow").hide();
    			$("#weatherPanel .active .weather_tip_arrow").show();
    			if( !$(".weather_option").hasClass("focus") ) {
		    		weatherShow();
		    	}
			},300);
		},function(){
			clearTimeout(weatherOnTime);
			if( !$(".weather_option").hasClass("focus") ) {
				h_weather.removeClass("active");
				w_item.first().addClass("active").siblings().removeClass("active");
				w_con.first().addClass("wether_tip_actived").siblings().removeClass("wether_tip_actived");
			}
		});
	}
}






























/**
  +----------------------------------------------------------
 * 公共类js对象
 +----------------------------------------------------------
 * log			name	date					note
 * @author		hxl		2012/10/25				整理
 +----------------------------------------------------------
 **/
bg.common = {
	/**
	  +----------------------------------------------------------
	 * 快速购买
	 +----------------------------------------------------------
	 * log			name	date					note
	 * @author		hxl		2012/10/25				整理
	 +----------------------------------------------------------
	 **/
	'fastBuy': function(params) {
		var me = this;
		$.ajax({
			'type': 'GET',
			'url': consts('app') + '/Public/fastBuy?callback=?&time=' + Math.random(),
			'data': {'goodsSn': params['goodsSn']},
			'dataType': 'json',
			'cache': 'false',
			'success': function(data, textStatus) {
				bg.utils.showPopup('快速购买');
				$('#pop_window').css({'margin-left': '-295px', 'width': '590px'});
				$('#pop_content').css({'width': '580px'});
				$('#pop_content .pop_content_inner').html(data);
				me.getColorList({'obj': $('#pop_window'), 'goodsSn': params['goodsSn'], 'disStock': 1});
				me.getSizeList({'obj': $('#pop_window'), 'goodsSn': params['goodsSn']});
				$('#pop_window').find('a[name="addGoods"]').click(function() {
					params.callbackFun();
				});
			}
		});
	},
	/**
	  +----------------------------------------------------------
	 * 获取颜色列表
	 +----------------------------------------------------------
	 * log			name	date					note
	 * @author		hxl		2012/10/25				整理
	 +----------------------------------------------------------
	 **/
	'getColorList': function(params) {
		var me = this;
		var result = me.changeHiddenVal(params);
		$.ajax({
			'type': 'GET',
			'url': consts('app') + '/Public/getColorList?callback=?&time=' + Math.random(),
			'data': {'goodsSn': params['goodsSn'], 'sizeCode': result.sizeCode},
			'dataType': 'json',
			'cache': 'false',
			'success': function(data, textStatus) {
				$(params['obj']).find('.color_list').html(data);
				if(!params['disStock']) {
					me.changeGoodsNumber({'obj': params['obj'], 'goodsSn': params['goodsSn']});
				}
				$(params['obj']).find('.color_list').find('li').each(function() {
					$(this).click(function() {
						if($(this).attr('available') !== '0') {
							me.getSizeList({'obj': params['obj'], 'goodsSn': params['goodsSn'], 'colorCode': $(this).attr('colorCode'), 'colorName': $(this).attr('colorName'), 'imgUrl': $(this).attr('imgUrl')});
						}
					});
				});
				$(params['obj']).find('a[name="color_' + result.colorCode + '"]').addClass('selected');
				$(params['obj']).find('a[name="size_' + result.sizeCode + '"]').addClass('selected');
			}
		});
	},
	/**
	  +----------------------------------------------------------
	 * 获取尺码列表
	 +----------------------------------------------------------
	 * log			name	date					note
	 * @author		hxl		2012/10/25				整理
	 +----------------------------------------------------------
	 **/
	'getSizeList': function(params) {
		var me = this;
		var result = me.changeHiddenVal(params);
		$.ajax({
			'type': 'GET',
			'url': consts('app') + '/Public/getSizeList?callback=?&time=' + Math.random(),
			'data': {'goodsSn': params['goodsSn'], 'colorCode': result.colorCode},
			'dataType': 'json',
			'cache': 'false',
			'success': function(data, textStatus) {
				$(params['obj']).find('.size_list').html(data);
				if(!params['disStock']) {
					me.changeGoodsNumber({'obj': params['obj'], 'goodsSn': params['goodsSn']});
				}
				$(params['obj']).find('.size_list').find('li').each(function() {
					$(this).click(function() {
						if($(this).attr('available') !== '0') {
							me.getColorList({'obj': params['obj'], 'goodsSn': params['goodsSn'], 'sizeCode': $(this).attr('sizeCode'), 'sizeName': $(this).attr('sizeName')});
						}
					});
				});
				$(params['obj']).find('a[name="size_' + result.sizeCode + '"]').addClass('selected');
				$(params['obj']).find('a[name="color_' + result.colorCode + '"]').addClass('selected');
			}
		});
	},
	/**
	  +----------------------------------------------------------
	 * 隐藏域值改变
	 +----------------------------------------------------------
	 * log			name	date					note
	 * @author		hxl		2012/10/25				整理
	 +----------------------------------------------------------
	 **/
	'changeHiddenVal': function(params) {
		var colorCode = $(params['obj']).find('input[name="color_code"]').val();
		var colorName = $(params['obj']).find('input[name="color_name"]').val();
		var sizeCode = $(params['obj']).find('input[name="size_code"]').val();
		var sizeName = $(params['obj']).find('input[name="size_name"]').val();
		var imgUrl = $(params['obj']).find('input[name="img_url"]').val();
		colorCode = colorCode && params['colorCode'] == colorCode ? '' : (params['colorCode'] || colorCode);
		colorName = colorName && colorName !='请选择颜色' && params['colorName'] == colorName ? '请选择颜色' : (params['colorName'] || colorName);
		sizeCode = sizeCode && params['sizeCode'] == sizeCode ? '' : (params['sizeCode'] || sizeCode);
		sizeName = sizeName && sizeName !='请选择尺寸' && params['sizeName'] == sizeName ? '请选择尺寸' : (params['sizeName'] || sizeName);
		imgUrl = imgUrl && params['imgUrl'] == imgUrl ? '' : (params['imgUrl'] || imgUrl);
		$(params['obj']).find('input[name="img_url"]').val(imgUrl);
		$(params['obj']).find('input[name="color_code"]').val(colorCode);
		$(params['obj']).find('input[name="color_name"]').val(colorName);
		$(params['obj']).find('.current_color').html(colorName || '请选择颜色');
		$(params['obj']).find('input[name="size_code"]').val(sizeCode);
		$(params['obj']).find('input[name="size_name"]').val(sizeName);
		$(params['obj']).find('.current_size').html(sizeName || '请选择尺寸');
		$(params['obj']).find('a').removeClass('selected');
		return {'colorCode': colorCode, 'sizeCode': sizeCode};
	},
	/**
	  +----------------------------------------------------------
	 * 获取库存
	 +----------------------------------------------------------
	 * log			name	date					note
	 * @author		hxl		2012/10/25				整理
	 +----------------------------------------------------------
	 **/
	'changeGoodsNumber': function(params) {
		var me = this;
		var colorCode = $(params['obj']).find('input[name="color_code"]').val();
		var sizeCode = $(params['obj']).find('input[name="size_code"]').val();
		$.ajax({
			'type': 'GET',
			'url': consts('app') + '/Public/getGoodsStock?callback=?&time=' + Math.random(),
			'data': {'goodsSn': params['goodsSn'], 'colorCode': colorCode, 'sizeCode': sizeCode},
			'dataType': 'json',
			'cache': 'false',
			'success': function(data, textStatus) {
				$(params['obj']).find('.buynumber').html(data['data']);
				$(params['obj']).find('input[name="goods_number"]').blur(function(){
					num = $(this).val();
					if(num <= 0) {
						alert('该商品至少购买一件！');
						$(this).val(1);
						return false;
					}
					if(num > data.maxNum) {
						alert('您的购买超出库存！');
						$(this).val(data.maxNum);
						return false;
					}
				})
				$(params['obj']).find('.reduce').click(function(){
					var num = parseInt($(params['obj']).find('input[name="goods_number"]').val()) - 1;
					if(num <= 0) {
						alert('该商品至少购买一件！');
						$(params['obj']).find('input[name="goods_number"]').val(1);
						return false;
					}
					$(params['obj']).find('input[name="goods_number"]').val(num);
				});
				$(params['obj']).find('.add').click(function(){
					var num = parseInt($(params['obj']).find('input[name="goods_number"]').val()) + 1;
					if(num > data.maxNum) {
						alert('您的购买超出库存！');
						$(params['obj']).find('input[name="goods_number"]').val(data.maxNum);
						return false;
					}
					$(params['obj']).find('input[name="goods_number"]').val(num);
				});
			}
		});
	},
	/* *
	 * 头部搜索框 搜索首页
	 */
	'searchBox': function() {
	    var isOut = true;
	    var container = jQuery('.searchHeader');
	    var form = container.children('form');
	    var case_keyword = container.find('.inputbox');
	    var case_legend = container.find('.searchDropdown');
	    var case_submit = container.find('.searchbtn');
	    var input_keyword = form.find('input[name=word]');
	    //--BEGIN--form-submit
	    form.submit(function() {
	        var keyword = (input_keyword.val() == input_keyword.attr('promptvalue')) ? '': input_keyword.val().replace(/<[^>]*>\\\//g, "");
	        case_legend.hide();
	        var url = consts('search') + '/Search/a_a.shtml?clickType=1&word=' + encodeURIComponent(keyword);
	        var searchWinName = 'SearchWin';
	        var target = searchWinName;
	        if (window.location.pathname.match(/^\/Search\b/)) {
	            target = '_self';
	        }
	        window.nwin = window.open(url, target);
	        nwin.focus();
	        return false;
	    });
	    case_submit.click(function() {
	        form.submit();
	    });
	    jQuery('body').click(function() {
	        if (isOut == true) {
	            case_legend.hide();
	        }
	    });
	    container.mouseout(function() {
	        isOut = true;
	    });
	    container.mouseover(function() {
	        isOut = false;
	    });
	    //--END--form-submit
	    var upKeyCode = 38;
	    var downKeyCode = 40;
	    var enterKeyCode = 13;
	    //--BEGIN--keyword-legend
	    var case_legend_ul = case_legend.children('ul');
	    case_legend.find('.close a').click(function() {
	        case_legend.hide();
	    });
	    var i = -1;
	    input_keyword.val(input_keyword.attr('promptvalue')).focus(function() {
	        var c = jQuery(this);
	        if (c.attr('promptvalue') == c.val()) c.val('');
	        case_keyword.addClass('inputfocus');
	    }).blur(function() {
	        var c = jQuery(this);
	        if (c.val().match(/^\s*$/)) {
	            c.val(c.attr('promptvalue'));
	            case_keyword.removeClass('inputfocus');
	        }
	    }).keyup(function(event) {
	        var c = jQuery(this);
	        if (event.keyCode == 40) {
	            i++;
	        } else if (event.keyCode == 38) {
	            i--;
	        }
	        if (event.keyCode == 40 || event.keyCode == 38 || event.keyCode == 191 || event.keyCode == 220) {
	            var lis = case_legend_ul.children();
	            for (l = 0; l < lis.length; l++) {
	                var li = jQuery(lis[l]);
	                if (l == i) {
	                    var selecthtml = li.find('p').text();
	                    if (selecthtml) {
	                        var keyword = (selecthtml.indexOf('"') == '-1') ? selecthtml.replace(/<[^>]*>\\\//g, "") : ($("*[kl^='klf'] :first").find("p").text() + selecthtml.substring((selecthtml.indexOf('"') + 1), selecthtml.indexOf('"', (selecthtml.indexOf('"')) + 1)));
	                        c.val(keyword);
	                    }
	                    li.css('background', '#f5f5f5');
	                } else {
	                    li.css('background', '');
	                }
	            }
	            if (i == -1 || i == lis.length) {
	                c.val(c.attr('rawvalue'));
	                c.trigger('change');
	            } else {
	                if (i == lis.length + 1) {
	                    i = 0;
	                }
	                var li = jQuery(lis[i]);
	                li.trigger('mouseover');
	            }
	            return;
	        }
	        var raw = c.attr('rawvalue');
	        var keyword = bg.utils.trim(c.val().replace(/<[^>]*>\\\//g, ""));
	        if (keyword != raw && keyword == '') {
	            c.attr('rawvalue', keyword);
	            case_legend.hide();
	        } else if (keyword != raw) {
	            var url = consts('search') + "/Search/suggest?q=" + encodeURIComponent(keyword);
	            jQuery.getJSON(url + "&callback=?",
	            function(data) {
	                if (typeof(data) == 'undefined' || data == null) return;
	                c.attr('rawvalue', keyword);
	                case_legend_ul.html('');
	                for (var i = 0; i < data.length; i++) {
	                    var child = '';
	                    var item = data[i];
	                    var title = item.k.replace(new RegExp(keyword, 'g'), keyword);
	                    var content = item.k.replace(new RegExp(keyword, 'g'), '<strong>' + keyword + '</strong>');
	                    var url = consts('search') + "/Search/a_a.shtml?clickType=2&word=" + encodeURIComponent(item.k);
	                    if (item['cs'].length > 0) {
	                        for (var j = 0; j < item['cs'].length; j++) {
	                            var jtem = item['cs'][j];
	                            var jurl = consts('search') + "/Search/a_" + jtem.cateId + ".shtml?clickType=2&word=" + encodeURIComponent(item.k);
	                            child += '<li><a href="' + jurl + '" target="_blank" ><span><em>' + jtem.c + '</em> 件商品</span><p style="padding-left:20px;">在"' + jtem.cateName + '"分类下</p></a></li>';
	                        }
	                    }
	                    if (item['brands'].length > 0) {
	                        for (var j = 0; j < item['brands'].length; j++) {
	                            var jtem = item['brands'][j];
	                            var jurl = consts('search') + "/Search/a_a_a_a_a_a_" + jtem.code + ".shtml?clickType=2&word=" + encodeURIComponent(item.k);
	                            child += '<li><a href="' + jurl + '" target="_blank" ><span><em>' + jtem.count + '</em> 件商品</span><p style="padding-left:20px;">在"' + jtem.name + '"品牌下</p></a></li>';
	                        }
	                    }
	                    if (typeof(item['goods']['goodsSn']) != 'undefined') {
	                        var goodsUrl = consts('domain').replace('www', 'metersbonwe') + '/Goods/' + item['goods']['goodsSn'] + '.shtml?clickType=2';
	                        var ImgUrl = 'http://img.mbanggo.com' + item['goods']['img'].replace('.jpg', '--w_38_h_42.jpg');
	                        if (i < 6) case_legend_ul.append(jQuery('<li class="searchDowm"><a href="' + goodsUrl + '" target="_blank" ><img width="38" height="42" src="' + ImgUrl + '"  /><p>' + item['goods']['title'] + '</p><p>售价：<strong>' + "¥" + item['goods']['price'] + '</strong> &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;商品编码：' + content + '</p></a></li>'));
	                    } else {
	                        case_legend_ul.append(jQuery('<li kl="klf"><a href="' + url + '" target="_blank" ><span><em>' + item.c + '</em> 件商品</span><p style="padding-left:10px;">' + content + '</p></a></li>' + child));
	                    }
	                }
	                if (data.length) {
	                    case_legend.show();
	                    isOut = false;
	                } else {
	                    case_legend.hide();
	                }
	            },
	            'json');
	        }
	    }).change(function() {
	        var c = jQuery(this),
	        v = c.val();
	        case_legend_ul.children().each(function() {
	            var c1 = jQuery(this);
	            var selected = (c1.find('p').text() == v);
	            c1.css('background-color', selected ? '#f4f4f4': '');
	            c1.attr('selected', selected ? 'yes': 'no');
	        });
	    });
	    if (typeof(user_keyword) != 'undefined') {
	        input_keyword.val(user_keyword);
	    }	
	},
	/* *
	 * 头部购物车
	 */
	'showCart': function() {
		$("#shopping_bag").hover(function(){
    		if( $("#shopping_show ul").html() == null ) _BuyNumJson();
    		if($("#shopping_show").html()!=""){
    			$(this).find(".goodsnum").addClass("icon");
    		}
    		$(this).addClass("on");
    	},function(){
    		$(this).find(".goodsnum").removeClass("icon");
    		$(this).removeClass("on");
    	});
	},
	/* *
	 * 收藏邦购网
	 * @obj		对象
	 */
	'addFavorite': function(obj) {
        var d = "http://www.banggo.com/";
        var c = "邦购网-美特斯邦威官方商城";
		$(obj).click(function(e) {
			if (document.all) {
	            window.external.AddFavorite(d, c);
	        } else {
	            if (window.sidebar) {
	                window.sidebar.addPanel(c, d, "");
	            } else {
	                alert("对不起，您的浏览器不支持此操作!\n请您使用菜单栏或Ctrl+D收藏本站。");
	            }
	        }
			e.preventDefault();
		});        
    },
	/* *
	 * 获取商品即时信息(标签)
	 * @obj		对象
	 */
	'ajaxGetGoodsInfo': function(obj) {
		var abjArr = obj.split(",");
		$.each(abjArr,function(i,n){
			var goodsSnStr = '';
			$.each($(n+" li"),function(){
				var goodsSn = $(this).attr('goodsSn');
				if( typeof(goodsSn) != 'undefined' && goodsSn != '' ) goodsSnStr += goodsSn + ',';
			});
			if( goodsSnStr == null || typeof(goodsSnStr) == 'undefined' || goodsSnStr == '' ) return true;
			$.each($(n+" .discount"),function(){
				if( typeof($(this).html()) != 'undefined' && $(this).html() != '' ) $(this).addClass("discountTag");
			});
			var params={goodsSnStr:goodsSnStr};
			$.getJSON( consts('act')+"/Goods/ajaxGetGoodsInfo?time="+Math.random()+"&callback=?",params,function(data){
				if( data == null || typeof(data) == 'undefined' ) return;
				$.each(data,function(_i,_n){
					if( _n == null || typeof(_n) == 'undefined' ) return true;
					var _obj = $(n+" li[goodsSn='"+_n['goodsSn']+"']");
					_obj.find(".price strong").html('¥'+_n['salePrice']);
					_obj.find(".avblNum").html(_n['avblNum']);
					if( _n['displayTag'] != '' && typeof(_n['displayTag']) != 'undefined' ){
						_obj.find(".discount").html(_n['displayTag']);
						_obj.find(".discount").addClass("goodsTag");
						_obj.find(".discount").removeClass("discountTag");
					}else if( _n['goodsDiscount'] != '' && typeof(_n['goodsDiscount']) != 'undefined' ){
						_obj.find(".discount").html(_n['goodsDiscount']);
					}
				});
			});
		});
	},
	/* *
	 * 退出登录
	 */
	'logout': function() {
	    var url = window.location.href;
	    location.href = consts('act')+'/User/logout?returnurl='+url;
	},
	/* *
	 * 鼠标移上图片，其他图片变暗效果 插件
	 */
	'imgMask' : function(options){
		var defaults = {
				target: null
			}
		var options = $.extend(defaults, options);
		var obj = $(options.target);
		$(obj).find("a").each(function(){
			if (!($.browser.msie && ($.browser.version == "6.0"))){
				$(this).append('<div class="mask"></div>');
				$(".mask").css({
					'position':'absolute',
					'top':'0',
					'left':'0',
					'background-color':'#000',
					'opacity':'0',
					'filter':'alpha(opacity=0)',
					'width':'100%',
					'height':'100%'
				});
			}
	        $(this).hover(function(){
				$(this).parent().parent().find(".mask").stop().animate({"opacity":0.3});
				$(this).find(".mask").stop().animate({"opacity":0});
	        },function() {
				$(this).parent().parent().find(".mask").stop().animate({"opacity":0});
			});
		});			
	}
}/**
 +----------------------------------------------------------
 * 工具类js对象
 +----------------------------------------------------------
 * log			name	date					note
 * @author		hxl		2012/10/25				整理
 +----------------------------------------------------------
**/
bg.utils = {
	/**
	 +----------------------------------------------------------
	 * 显示公共弹窗
	 +----------------------------------------------------------
	 * log			name	date					note
	 * @author		hxl		2012/10/25				整理
	 +----------------------------------------------------------
	**/
	'showPopup': function(title) {
		if($('#pop_window').length) {
			$('#pop_window, #pop_overlay, #pop_load').show();
			return true;
		}
		$('body', 'html').css({height: '100%', width: '100%'});
		var _html = '';
		_html += '<div id="pop_window"><table border="0" cellpadding="0" cellspacing="0">';
		_html += '<tr><td class="pop_tl"></td><td class="pop_tc"></td><td class="pop_tr"></td></tr>';
		_html += '<tr>';
		_html += '<td class="pop_cl"></td>';
		_html += '<td class="pop_cc">';
		_html += '<div id="pop_header"><span>' + title + '</span><em class="btn btn_close">关闭</em></div>';
		_html += '<div id="pop_content"><div class="pop_content_inner"></div></div>';
		_html += '</td>';
		_html += '<td class="pop_cr"></td>';
		_html += '</tr>';
		_html += '<tr><td class="pop_bl"></td><td class="pop_bc"></td><td class="pop_br"></td></tr>';
		_html += '</table></div>';
		_html += '<div id="pop_overlay" class="pop_overlay"></div>';
		_html += '<div id="pop_load"></div>';
		$('body').append(_html);
		$('#pop_header, .btn_close, #pop_overlay').click(bg.utils.closePopup);
		return true;
	},
	/**
	 +----------------------------------------------------------
	 * 关闭公共弹窗
	 +----------------------------------------------------------
	 * log			name	date					note
	 * @author		hxl		2012/10/25				整理
	 +----------------------------------------------------------
	**/
	'closePopup': function(){
		$('#pop_window, #pop_overlay, #pop_load').remove();
	},
	/* *
	 * 去特殊符号
	 */
	'trim': function(str, chars) {
		if (typeof chars == 'undefined') {
			chars = ' 	';
		}
		var c = str.charAt(0);
		while (c && chars.indexOf(c) >= 0) {
			str = str.substr(1);
			c = str.charAt(0);
		}
		var e = str.length - 1;
		while (e >= 0 && chars.indexOf(str.charAt(e)) >= 0) {
			str = str.substr(0, e);
			e--;
		}
		return str;
	},
	/* *
	 * URL处理
	 */
	'URLEncode': function(clearString) {
		var output = '';
		var x = 0;
		clearString = clearString.toString();
		var regex = /(^[a-zA-Z0-9-_.]*)/;
		while (x < clearString.length) {
			var match = regex.exec(clearString.substr(x));
			if (match != null && match.length > 1 && match[1] != '') {
				output += match[1];
				x += match[1].length;
			} else {
				if (clearString.substr(x, 1) == ' ') {
				//原文在此用 clearString[x] == ' ' 做判断, 但ie不支持把字符串当作数组来访问,
				//修改后两种浏览器都可兼容
				output += '+';
				} else {
					var charCode = clearString.charCodeAt(x);
					var hexVal = charCode.toString(16);
					output += '%' + ( hexVal.length < 2 ? '0' : '' ) + hexVal.toUpperCase();
				}
				x++;
			}
		}
	   return output;
	},
	/* *
	 * 切换样式 支持点击和滑过
	 *
	 * @obj			对象
	 * @action		行为（点击click或滑过hover）
	 * @className	变换的样式名
	 */
	'toggleClass': function(obj, action, className) {
	    $(obj).each(function() {
			switch(action){
				case "hover":
			        $(this).hover(function(){
						$(this).addClass(className);
					},function(){
						$(this).removeClass(className);
					});
					break;
				case "click":
					$(this).click(function(){
						$(this).toggleClass(className);
					});
					break;
			}
	    });	
	},
	/* *
	 * 鼠标滑过切换宽度
	 *
	 * @obj				对象
	 * @beforeWidth		初始宽度
	 * @afterWidth		结束宽度
	 */
	'toggleWidth':function(obj, beforeWidth, afterWidth) {
		$(obj).each(function() {
            $(this).hover(function() {
				$(this).stop().animate({width:beforeWidth},"fast");
			},function() {
				$(this).stop().animate({width:afterWidth},"fast");
			});
        });
		
	},
	/* *
	 * 跳转到指定对象ID或Class或页面顶部
	 *
	 * @obj		指定对象或空""（空值则调转到页面顶部）
	 * @time	跳转的时间
	 * @top  	距离顶部的距离（默认为0px）
	 */
	'scrollToIt': function(obj, time, top) {
		var top = top || 0;
		var time = time || 0;
		var obj = !obj ? 0 : $(obj).offset().top - top;
		$("html, body").animate({scrollTop: obj}, time);
	},
	/* *
	 * 验证码
	 *
	 * @obj		验证码图片对象
	 */
	'validPic': function(obj) {
		$(obj).attr('src', consts('act') + "/User/verify?" + Math.random());
	},
	/* *
	 * 选项卡tabs
	 *
	 * @obj		验证码图片对象
	 * @action	鼠标行为(点击click或滑过hover)
	 */
	'tabs': function(obj, action){
		$(obj).each(function() {
            $(this).find(".tab_menu >li").eq(0).addClass("cur");
			$(this).children(".tab_con").eq(0).addClass("cur");
			$(this).find(".tab_menu >li").live(action, function(index) {
				var i = $(this).index();
             	$(this).addClass("cur").siblings().removeClass("cur");
				$(this).parent().parent().find(".tab_con").eq(i).addClass("cur").siblings().removeClass("cur");
            });
        });
	},
	/* *
	 * 悬浮层，停留在顶部悬浮
	 *
	 * @obj		悬浮绑定对象
	 * @tar     参照对象
	 */
	'affixBar': function(obj, tar){
		var o = $(obj);
		var y= 0;
		var f= $(tar);

		if(navigator.userAgent.indexOf("MSIE 6.0")>0){
			//针对ie6
			window.onscroll=function(){
				y = (document.body.scrollTop||document.documentElement.scrollTop);
				if( y > f.offset().top ){
					o.css({position:"absolute","margin-top":y,top:"0"});
				}else{
					o.css({position:"","margin-top":"0",top:""});
				}
			};
		}else{
			//ie7以上
			window.onscroll=function(){
				y = (document.body.scrollTop||document.documentElement.scrollTop);
				if( y > f.offset().top ){
					o.css({position:"fixed",top:"0"});
				}else {
					o.css({position:"",top:""});
				}
			};
		}
		window.onresize=function(){
			y=(document.body.scrollTop||document.documentElement.scrollTop);
		}
	},
	/* *
	 * 加载单个js函数
	 *
	 * @url			需要加载的js的路径
	 * @callback	加载后的回调函数
	 */
	 'loadjs': function(url,callback){
		var head = document.getElementsByTagName("head")[0];
		var script = document.createElement('script');
		script.onload = script.onreadystatechange = script.onerror = function (){
			if (script && script.readyState && /^(?!(?:loaded|complete)$)/.test(script.readyState)) return;
			script.onload = script.onreadystatechange = script.onerror = null;
			script.src = '';
			script.parentNode.removeChild(script);
			script = null;
			callback();
		}
		script.charset = "gb2312";
		script.src = url;
		try {
			head.appendChild(script);
		} catch (exp) {}
	},
	/* *
	 * 加载多个js函数
	 *
	 * @url			需要加载的js的路径
	 * @callback	加载后的回调函数
	 */
	 'loadmultijs': function(url,callback){
		if(Object.prototype.toString.call(url)==='[object Array]'){	//是否数组
			this.suc = 0;			//加载计数
			this.len = url.length;	//数组长度
			var a = this;
			for(var i = 0;i < url.length;i++){
				loadjs(url[i],function(){ a.suc++; if(a.suc == a.len) try{callback();}catch(e){} });
			}
		}else if(typeof(url) == 'string'){
			loadjs(url,callback);
		}
	}
	
}






























/* $Id : utils.js 5052 2009-06-12 07:35:58Z modified $ */

var Browser = new Object();

Browser.isMozilla = (typeof document.implementation != 'undefined') && (typeof document.implementation.createDocument != 'undefined') && (typeof HTMLDocument != 'undefined');
Browser.isIE = window.ActiveXObject ? true : false;
Browser.isFirefox = (navigator.userAgent.toLowerCase().indexOf("firefox") != - 1);
Browser.isSafari = (navigator.userAgent.toLowerCase().indexOf("safari") != - 1);
Browser.isOpera = (navigator.userAgent.toLowerCase().indexOf("opera") != - 1);

var Utils = new Object();

Utils.htmlEncode = function(text)
{
  return text.replace(/&/g, '&amp;').replace(/"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
}

Utils.trim = function( text )
{
  if (typeof(text) == "string")
  {
    return text.replace(/^\s*|\s*$/g, "");
  }
  else
  {
    return text;
  }
}

Utils.isEmpty = function( val )
{
  switch (typeof(val))
  {
    case 'string':
      return Utils.trim(val).length == 0 ? true : false;
      break;
    case 'number':
      return val == 0;
      break;
    case 'object':
      return val == null;
      break;
    case 'array':
      return val.length == 0;
      break;
    default:
      return 12;
  }
}

Utils.isNumber = function(val)
{
  var reg = /^[\d|\.|,|-]+$/;
  return reg.test(val);
}

Utils.isInt = function(val)
{
  if (val == "")
  {
    return false;
  }
  var reg = /\D+/;
  return !reg.test(val);
}

Utils.isEmail = function( email )
{
  var reg1 = /([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)/;

  return reg1.test( email );
}

Utils.isMobile = function( mobile )
{
  var reg2 = /^13[0-9]{9}$|15[0-9]{9}$|18[0-9]{9}$|14[0-9]{9}$/;

  return reg2.test( mobile );
}

Utils.isTel = function ( tel )
{
  var reg = /^[\d|\-|\s|\_]+$/; //只允许使用数字-空格等

  return reg.test( tel );
}

Utils.fixEvent = function(e)
{
  var evt = (typeof e == "undefined") ? window.event : e;
  return evt;
}

Utils.srcElement = function(e)
{
  if (typeof e == "undefined") e = window.event;
  var src = document.all ? e.srcElement : e.target;

  return src;
}

Utils.isTime = function(val)
{
  var reg = /^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}$/;

  return reg.test(val);
}

Utils.x = function(e)
{ //当前鼠标X坐标
    return Browser.isIE?event.x + document.documentElement.scrollLeft - 2:e.pageX;
}

Utils.y = function(e)
{ //当前鼠标Y坐标
    return Browser.isIE?event.y + document.documentElement.scrollTop - 2:e.pageY;
}

Utils.request = function(url, item)
{
	var sValue=url.match(new RegExp("[\?\&]"+item+"=([^\&]*)(\&?)","i"));
	return sValue?sValue[1]:sValue;
}

Utils.$ = function(name)
{
    return document.getElementById(name);
}

function rowindex(tr)
{
  if (Browser.isIE)
  {
    return tr.rowIndex;
  }
  else
  {
    table = tr.parentNode.parentNode;
    for (i = 0; i < table.rows.length; i ++ )
    {
      if (table.rows[i] == tr)
      {
        return i;
      }
    }
  }
}

document.getCookie = function(sName)
{
  // cookies are separated by semicolons
  var aCookie = document.cookie.split("; ");
  for (var i=0; i < aCookie.length; i++)
  {
    // a name/value pair (a crumb) is separated by an equal sign
    var aCrumb = aCookie[i].split("=");
    if (sName == aCrumb[0])
      return decodeURIComponent(aCrumb[1]);
  }

  // a cookie with the requested name does not exist
  return null;
}

document.setCookie = function(sName, sValue, sExpires)
{
  var sCookie = sName + "=" + encodeURIComponent(sValue);
  if (sExpires != null)
  {
    sCookie += "; expires=" + sExpires;
  }

  document.cookie = sCookie;
}

document.removeCookie = function(sName,sValue)
{
  document.cookie = sName + "=; expires=Fri, 31 Dec 1999 23:59:59 GMT;";
}

function getPosition(o)
{
    var t = o.offsetTop;
    var l = o.offsetLeft;
    while(o = o.offsetParent)
    {
        t += o.offsetTop;
        l += o.offsetLeft;
    }
    var pos = {top:t,left:l};
    return pos;
}

function cleanWhitespace(element)
{
  var element = element;
  for (var i = 0; i < element.childNodes.length; i++) {
   var node = element.childNodes[i];
   if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
     element.removeChild(node);
   }
}

function ___getPageSize() {
         var xScroll, yScroll;
            if (window.innerHeight && window.scrollMaxY) {
                xScroll = window.innerWidth + window.scrollMaxX;
                yScroll = window.innerHeight + window.scrollMaxY;
            } else if (document.body.scrollHeight > document.body.offsetHeight){ // all
																					// but
																					// Explorer
																					// Mac
                xScroll = document.body.scrollWidth;
                yScroll = document.body.scrollHeight;
            } else { // Explorer Mac...would also work in Explorer 6 Strict,
						// Mozilla and Safari
                xScroll = document.body.offsetWidth;
                yScroll = document.body.offsetHeight;
            }
            var windowWidth, windowHeight;
            if (self.innerHeight) { // all except Explorer
                if(document.documentElement.clientWidth){
                    windowWidth = document.documentElement.clientWidth;
                } else {
                   windowWidth = self.innerWidth;
                }
                windowHeight = self.innerHeight;
            } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer
																							// 6
																							// Strict
																							// Mode
                windowWidth = document.documentElement.clientWidth;
                windowHeight = document.documentElement.clientHeight;
            } else if (document.body) { // other Explorers
                windowWidth = document.body.clientWidth;
                windowHeight = document.body.clientHeight;
            }
            // for small pages with total height less then height of the
			// viewport
            if(yScroll < windowHeight){
                pageHeight = windowHeight;
            } else {
                pageHeight = yScroll;
            }
            // for small pages with total width less then width of the viewport
            if(xScroll < windowWidth){
                pageWidth = xScroll;
            } else {
                pageWidth = windowWidth;
            }
            arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight);
            return arrayPageSize;
        };


/**
 * 控制遮拦层
 */
function countrol_open_hui(show_code)
{

	var size_arr = ___getPageSize();
	var  width = size_arr[0];
	var height=size_arr[1];
	jQuery("#open_div_hui").width(width);
	jQuery("#open_div_hui").height(height);
	if(show_code=="1"){
		jQuery("#open_div_hui").show();
	}else{
		jQuery("#open_div_hui").hide();
	}
}









/**
 * jQuery Validation Plugin 1.8.1
 *
 * http://bassistance.de/jquery-plugins/jquery-plugin-validation/
 * http://docs.jquery.com/Plugins/Validation
 *
 * Copyright (c) 2006 - 2011 Jörn Zaefferer
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 */

;(function($) {

$.extend($.fn, {
	// http://docs.jquery.com/Plugins/Validation/validate
	validate: function( options ) {

		// if nothing is selected, return nothing; can't chain anyway
		if (!this.length) {
			options && options.debug && window.console && console.warn( "nothing selected, can't validate, returning nothing" );
			return;
		}

		// check if a validator for this form was already created
		var validator = $.data(this[0], 'validator');
		if ( validator ) {
			return validator;
		}

		validator = new $.validator( options, this[0] );
		$.data(this[0], 'validator', validator);

		if ( validator.settings.onsubmit ) {

			// allow suppresing validation by adding a cancel class to the submit button
			this.find("input, button").filter(".cancel").click(function() {
				validator.cancelSubmit = true;
			});

			// when a submitHandler is used, capture the submitting button
			if (validator.settings.submitHandler) {
				this.find("input, button").filter(":submit").click(function() {
					validator.submitButton = this;
				});
			}

			// validate the form on submit
			this.submit( function( event ) {
				if ( validator.settings.debug )
					// prevent form submit to be able to see console output
					event.preventDefault();

				function handle() {
					if ( validator.settings.submitHandler ) {
						if (validator.submitButton) {
							// insert a hidden input as a replacement for the missing submit button
							var hidden = $("<input type='hidden'/>").attr("name", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);
						}
						validator.settings.submitHandler.call( validator, validator.currentForm );
						if (validator.submitButton) {
							// and clean up afterwards; thanks to no-block-scope, hidden can be referenced
							hidden.remove();
						}
						return false;
					}
					return true;
				}

				// prevent submit for invalid forms or custom submit handlers
				if ( validator.cancelSubmit ) {
					validator.cancelSubmit = false;
					return handle();
				}
				if ( validator.form() ) {
					if ( validator.pendingRequest ) {
						validator.formSubmitted = true;
						return false;
					}
					return handle();
				} else {
					validator.focusInvalid();
					return false;
				}
			});
		}

		return validator;
	},
	// http://docs.jquery.com/Plugins/Validation/valid
	valid: function() {
        if ( $(this[0]).is('form')) {
            return this.validate().form();
        } else {
            var valid = true;
            var validator = $(this[0].form).validate();
            this.each(function() {
				valid &= validator.element(this);
            });
            return valid;
        }
    },
	// attributes: space seperated list of attributes to retrieve and remove
	removeAttrs: function(attributes) {
		var result = {},
			$element = this;
		$.each(attributes.split(/\s/), function(index, value) {
			result[value] = $element.attr(value);
			$element.removeAttr(value);
		});
		return result;
	},
	// http://docs.jquery.com/Plugins/Validation/rules
	rules: function(command, argument) {
		var element = this[0];

		if (command) {
			var settings = $.data(element.form, 'validator').settings;
			var staticRules = settings.rules;
			var existingRules = $.validator.staticRules(element);
			switch(command) {
			case "add":
				$.extend(existingRules, $.validator.normalizeRule(argument));
				staticRules[element.name] = existingRules;
				if (argument.messages)
					settings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages );
				break;
			case "remove":
				if (!argument) {
					delete staticRules[element.name];
					return existingRules;
				}
				var filtered = {};
				$.each(argument.split(/\s/), function(index, method) {
					filtered[method] = existingRules[method];
					delete existingRules[method];
				});
				return filtered;
			}
		}

		var data = $.validator.normalizeRules(
		$.extend(
			{},
			$.validator.metadataRules(element),
			$.validator.classRules(element),
			$.validator.attributeRules(element),
			$.validator.staticRules(element)
		), element);

		// make sure required is at front
		if (data.required) {
			var param = data.required;
			delete data.required;
			data = $.extend({required: param}, data);
		}

		return data;
	}
});

// Custom selectors
$.extend($.expr[":"], {
	// http://docs.jquery.com/Plugins/Validation/blank
	blank: function(a) {return !$.trim("" + a.value);},
	// http://docs.jquery.com/Plugins/Validation/filled
	filled: function(a) {return !!$.trim("" + a.value);},
	// http://docs.jquery.com/Plugins/Validation/unchecked
	unchecked: function(a) {return !a.checked;}
});

// constructor for validator
$.validator = function( options, form ) {
	this.settings = $.extend( true, {}, $.validator.defaults, options );
	this.currentForm = form;
	this.init();
};

$.validator.format = function(source, params) {
	if ( arguments.length == 1 )
		return function() {
			var args = $.makeArray(arguments);
			args.unshift(source);
			return $.validator.format.apply( this, args );
		};
	if ( arguments.length > 2 && params.constructor != Array  ) {
		params = $.makeArray(arguments).slice(1);
	}
	if ( params.constructor != Array ) {
		params = [ params ];
	}
	$.each(params, function(i, n) {
		source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n);
	});
	return source;
};

$.extend($.validator, {

	defaults: {
		messages: {},
		groups: {},
		rules: {},
		errorClass: "error",
		validClass: "valid",
		errorElement: "label",
		focusInvalid: true,
		errorContainer: $( [] ),
		errorLabelContainer: $( [] ),
		onsubmit: true,
		ignore: [],
		ignoreTitle: false,
		onfocusin: function(element) {
			this.lastActive = element;

			// hide error label and remove error class on focus if enabled
			if ( this.settings.focusCleanup && !this.blockFocusCleanup ) {
				this.settings.unhighlight && this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );
				this.addWrapper(this.errorsFor(element)).hide();
			}
		},
		onfocusout: function(element) {
			if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {
				this.element(element);
			}
		},
		onkeyup: function(element) {
			if ( element.name in this.submitted || element == this.lastElement ) {
				this.element(element);
			}
		},
		onclick: function(element) {
			// click on selects, radiobuttons and checkboxes
			if ( element.name in this.submitted )
				this.element(element);
			// or option elements, check parent select in that case
			else if (element.parentNode.name in this.submitted)
				this.element(element.parentNode);
		},
		highlight: function(element, errorClass, validClass) {
			if (element.type === 'radio') {
				this.findByName(element.name).addClass(errorClass).removeClass(validClass);
			} else {
				$(element).addClass(errorClass).removeClass(validClass);
			}
		},
		unhighlight: function(element, errorClass, validClass) {
			if (element.type === 'radio') {
				this.findByName(element.name).removeClass(errorClass).addClass(validClass);
			} else {
				$(element).removeClass(errorClass).addClass(validClass);
			}
		}
	},

	// http://docs.jquery.com/Plugins/Validation/Validator/setDefaults
	setDefaults: function(settings) {
		$.extend( $.validator.defaults, settings );
	},

	messages: {
		required: "This field is required.",
		remote: "Please fix this field.",
		email: "Please enter a valid email address.",
		url: "Please enter a valid URL.",
		date: "Please enter a valid date.",
		dateISO: "Please enter a valid date (ISO).",
		number: "Please enter a valid number.",
		digits: "Please enter only digits.",
		creditcard: "Please enter a valid credit card number.",
		equalTo: "Please enter the same value again.",
		accept: "Please enter a value with a valid extension.",
		maxlength: $.validator.format("Please enter no more than {0} characters."),
		minlength: $.validator.format("Please enter at least {0} characters."),
		rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."),
		range: $.validator.format("Please enter a value between {0} and {1}."),
		max: $.validator.format("Please enter a value less than or equal to {0}."),
		min: $.validator.format("Please enter a value greater than or equal to {0}.")
	},

	autoCreateRanges: false,

	prototype: {

		init: function() {
			this.labelContainer = $(this.settings.errorLabelContainer);
			this.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm);
			this.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer );
			this.submitted = {};
			this.valueCache = {};
			this.pendingRequest = 0;
			this.pending = {};
			this.invalid = {};
			this.reset();

			var groups = (this.groups = {});
			$.each(this.settings.groups, function(key, value) {
				$.each(value.split(/\s/), function(index, name) {
					groups[name] = key;
				});
			});
			var rules = this.settings.rules;
			$.each(rules, function(key, value) {
				rules[key] = $.validator.normalizeRule(value);
			});

			function delegate(event) {
				var validator = $.data(this[0].form, "validator"),
					eventType = "on" + event.type.replace(/^validate/, "");
				validator.settings[eventType] && validator.settings[eventType].call(validator, this[0] );
			}
			$(this.currentForm)
				.validateDelegate(":text, :password, :file, select, textarea", "focusin focusout keyup", delegate)
				.validateDelegate(":radio, :checkbox, select, option", "click", delegate);

			if (this.settings.invalidHandler)
				$(this.currentForm).bind("invalid-form.validate", this.settings.invalidHandler);
		},

		// http://docs.jquery.com/Plugins/Validation/Validator/form
		form: function() {
			this.checkForm();
			$.extend(this.submitted, this.errorMap);
			this.invalid = $.extend({}, this.errorMap);
			if (!this.valid())
				$(this.currentForm).triggerHandler("invalid-form", [this]);
			this.showErrors();
			return this.valid();
		},

		checkForm: function() {
			this.prepareForm();
			for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {
				this.check( elements[i] );
			}
			return this.valid();
		},

		// http://docs.jquery.com/Plugins/Validation/Validator/element
		element: function( element ) {
			element = this.clean( element );
			this.lastElement = element;
			this.prepareElement( element );
			this.currentElements = $(element);
			var result = this.check( element );
			if ( result ) {
				delete this.invalid[element.name];
			} else {
				this.invalid[element.name] = true;
			}
			if ( !this.numberOfInvalids() ) {
				// Hide error containers on last error
				this.toHide = this.toHide.add( this.containers );
			}
			this.showErrors();
			return result;
		},

		// http://docs.jquery.com/Plugins/Validation/Validator/showErrors
		showErrors: function(errors) {
			if(errors) {
				// add items to error list and map
				$.extend( this.errorMap, errors );
				this.errorList = [];
				for ( var name in errors ) {
					this.errorList.push({
						message: errors[name],
						element: this.findByName(name)[0]
					});
				}
				// remove items from success list
				this.successList = $.grep( this.successList, function(element) {
					return !(element.name in errors);
				});
			}
			this.settings.showErrors
				? this.settings.showErrors.call( this, this.errorMap, this.errorList )
				: this.defaultShowErrors();
		},

		// http://docs.jquery.com/Plugins/Validation/Validator/resetForm
		resetForm: function() {
			if ( $.fn.resetForm )
				$( this.currentForm ).resetForm();
			this.submitted = {};
			this.prepareForm();
			this.hideErrors();
			this.elements().removeClass( this.settings.errorClass );
		},

		numberOfInvalids: function() {
			return this.objectLength(this.invalid);
		},

		objectLength: function( obj ) {
			var count = 0;
			for ( var i in obj )
				count++;
			return count;
		},

		hideErrors: function() {
			this.addWrapper( this.toHide ).hide();
		},

		valid: function() {
			return this.size() == 0;
		},

		size: function() {
			return this.errorList.length;
		},

		focusInvalid: function() {
			if( this.settings.focusInvalid ) {
				try {
					$(this.findLastActive() || this.errorList.length && this.errorList[0].element || [])
					.filter(":visible")
					.focus()
					// manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find
					.trigger("focusin");
				} catch(e) {
					// ignore IE throwing errors when focusing hidden elements
				}
			}
		},

		findLastActive: function() {
			var lastActive = this.lastActive;
			return lastActive && $.grep(this.errorList, function(n) {
				return n.element.name == lastActive.name;
			}).length == 1 && lastActive;
		},

		elements: function() {
			var validator = this,
				rulesCache = {};

			// select all valid inputs inside the form (no submit or reset buttons)
			return $(this.currentForm)
			.find("input, select, textarea")
			.not(":submit, :reset, :image, [disabled]")
			.not( this.settings.ignore )
			.filter(function() {
				!this.name && validator.settings.debug && window.console && console.error( "%o has no name assigned", this);

				// select only the first element for each name, and only those with rules specified
				if ( this.name in rulesCache || !validator.objectLength($(this).rules()) )
					return false;

				rulesCache[this.name] = true;
				return true;
			});
		},

		clean: function( selector ) {
			return $( selector )[0];
		},

		errors: function() {
			return $( this.settings.errorElement + "." + this.settings.errorClass, this.errorContext );
		},

		reset: function() {
			this.successList = [];
			this.errorList = [];
			this.errorMap = {};
			this.toShow = $([]);
			this.toHide = $([]);
			this.currentElements = $([]);
		},

		prepareForm: function() {
			this.reset();
			this.toHide = this.errors().add( this.containers );
		},

		prepareElement: function( element ) {
			this.reset();
			this.toHide = this.errorsFor(element);
		},

		check: function( element ) {
			element = this.clean( element );

			// if radio/checkbox, validate first element in group instead
			if (this.checkable(element)) {
				element = this.findByName( element.name ).not(this.settings.ignore)[0];
			}

			var rules = $(element).rules();
			var dependencyMismatch = false;
			for (var method in rules ) {
				var rule = { method: method, parameters: rules[method] };
				try {
					var result = $.validator.methods[method].call( this, element.value.replace(/\r/g, ""), element, rule.parameters );

					// if a method indicates that the field is optional and therefore valid,
					// don't mark it as valid when there are no other rules
					if ( result == "dependency-mismatch" ) {
						dependencyMismatch = true;
						continue;
					}
					dependencyMismatch = false;

					if ( result == "pending" ) {
						this.toHide = this.toHide.not( this.errorsFor(element) );
						return;
					}

					if( !result ) {
						this.formatAndAdd( element, rule );
						return false;
					}
				} catch(e) {
					this.settings.debug && window.console && console.log("exception occured when checking element " + element.id
						 + ", check the '" + rule.method + "' method", e);
					throw e;
				}
			}
			if (dependencyMismatch)
				return;
			if ( this.objectLength(rules) )
				this.successList.push(element);
			return true;
		},

		// return the custom message for the given element and validation method
		// specified in the element's "messages" metadata
		customMetaMessage: function(element, method) {
			if (!$.metadata)
				return;

			var meta = this.settings.meta
				? $(element).metadata()[this.settings.meta]
				: $(element).metadata();

			return meta && meta.messages && meta.messages[method];
		},

		// return the custom message for the given element name and validation method
		customMessage: function( name, method ) {
			var m = this.settings.messages[name];
			return m && (m.constructor == String
				? m
				: m[method]);
		},

		// return the first defined argument, allowing empty strings
		findDefined: function() {
			for(var i = 0; i < arguments.length; i++) {
				if (arguments[i] !== undefined)
					return arguments[i];
			}
			return undefined;
		},

		defaultMessage: function( element, method) {
			return this.findDefined(
				this.customMessage( element.name, method ),
				this.customMetaMessage( element, method ),
				// title is never undefined, so handle empty string as undefined
				!this.settings.ignoreTitle && element.title || undefined,
				$.validator.messages[method],
				"<strong>Warning: No message defined for " + element.name + "</strong>"
			);
		},

		formatAndAdd: function( element, rule ) {
			var message = this.defaultMessage( element, rule.method ),
				theregex = /\$?\{(\d+)\}/g;
			if ( typeof message == "function" ) {
				message = message.call(this, rule.parameters, element);
			} else if (theregex.test(message)) {
				message = jQuery.format(message.replace(theregex, '{$1}'), rule.parameters);
			}
			this.errorList.push({
				message: message,
				element: element
			});

			this.errorMap[element.name] = message;
			this.submitted[element.name] = message;
		},

		addWrapper: function(toToggle) {
			if ( this.settings.wrapper )
				toToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );
			return toToggle;
		},

		defaultShowErrors: function() {
			for ( var i = 0; this.errorList[i]; i++ ) {
				var error = this.errorList[i];
				this.settings.highlight && this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );
				this.showLabel( error.element, error.message );
			}
			if( this.errorList.length ) {
				this.toShow = this.toShow.add( this.containers );
			}
			if (this.settings.success) {
				for ( var i = 0; this.successList[i]; i++ ) {
					this.showLabel( this.successList[i] );
				}
			}
			if (this.settings.unhighlight) {
				for ( var i = 0, elements = this.validElements(); elements[i]; i++ ) {
					this.settings.unhighlight.call( this, elements[i], this.settings.errorClass, this.settings.validClass );
				}
			}
			this.toHide = this.toHide.not( this.toShow );
			this.hideErrors();
			this.addWrapper( this.toShow ).show();
		},

		validElements: function() {
			return this.currentElements.not(this.invalidElements());
		},

		invalidElements: function() {
			return $(this.errorList).map(function() {
				return this.element;
			});
		},

		showLabel: function(element, message) {
			var label = this.errorsFor( element );
			if ( label.length ) {
				// refresh error/success class
				label.removeClass().addClass( this.settings.errorClass );

				// check if we have a generated label, replace the message then
				label.attr("generated") && label.html(message);
			} else {
				// create label
				label = $("<" + this.settings.errorElement + "/>")
					.attr({"for":  this.idOrName(element), generated: true})
					.addClass(this.settings.errorClass)
					.html(message || "");
				if ( this.settings.wrapper ) {
					// make sure the element is visible, even in IE
					// actually showing the wrapped element is handled elsewhere
					label = label.hide().show().wrap("<" + this.settings.wrapper + "/>").parent();
				}
				if ( !this.labelContainer.append(label).length )
					this.settings.errorPlacement
						? this.settings.errorPlacement(label, $(element) )
						: label.insertAfter(element);
			}
			if ( !message && this.settings.success ) {
				label.text("");
				typeof this.settings.success == "string"
					? label.addClass( this.settings.success )
					: this.settings.success( label );
			}
			this.toShow = this.toShow.add(label);
		},

		errorsFor: function(element) {
			var name = this.idOrName(element);
    		return this.errors().filter(function() {
				return $(this).attr('for') == name;
			});
		},

		idOrName: function(element) {
			return this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name);
		},

		checkable: function( element ) {
			return /radio|checkbox/i.test(element.type);
		},

		findByName: function( name ) {
			// select by name and filter by form for performance over form.find("[name=...]")
			var form = this.currentForm;
			return $(document.getElementsByName(name)).map(function(index, element) {
				return element.form == form && element.name == name && element  || null;
			});
		},

		getLength: function(value, element) {
			switch( element.nodeName.toLowerCase() ) {
			case 'select':
				return $("option:selected", element).length;
			case 'input':
				if( this.checkable( element) )
					return this.findByName(element.name).filter(':checked').length;
			}
			return value.length;
		},

		depend: function(param, element) {
			return this.dependTypes[typeof param]
				? this.dependTypes[typeof param](param, element)
				: true;
		},

		dependTypes: {
			"boolean": function(param, element) {
				return param;
			},
			"string": function(param, element) {
				return !!$(param, element.form).length;
			},
			"function": function(param, element) {
				return param(element);
			}
		},

		optional: function(element) {
			return !$.validator.methods.required.call(this, $.trim(element.value), element) && "dependency-mismatch";
		},

		startRequest: function(element) {
			if (!this.pending[element.name]) {
				this.pendingRequest++;
				this.pending[element.name] = true;
			}
		},

		stopRequest: function(element, valid) {
			this.pendingRequest--;
			// sometimes synchronization fails, make sure pendingRequest is never < 0
			if (this.pendingRequest < 0)
				this.pendingRequest = 0;
			delete this.pending[element.name];
			if ( valid && this.pendingRequest == 0 && this.formSubmitted && this.form() ) {
				$(this.currentForm).submit();
				this.formSubmitted = false;
			} else if (!valid && this.pendingRequest == 0 && this.formSubmitted) {
				$(this.currentForm).triggerHandler("invalid-form", [this]);
				this.formSubmitted = false;
			}
		},

		previousValue: function(element) {
			return $.data(element, "previousValue") || $.data(element, "previousValue", {
				old: null,
				valid: true,
				message: this.defaultMessage( element, "remote" )
			});
		}

	},

	classRuleSettings: {
		required: {required: true},
		email: {email: true},
		url: {url: true},
		date: {date: true},
		dateISO: {dateISO: true},
		dateDE: {dateDE: true},
		number: {number: true},
		numberDE: {numberDE: true},
		digits: {digits: true},
		creditcard: {creditcard: true}
	},

	addClassRules: function(className, rules) {
		className.constructor == String ?
			this.classRuleSettings[className] = rules :
			$.extend(this.classRuleSettings, className);
	},

	classRules: function(element) {
		var rules = {};
		var classes = $(element).attr('class');
		classes && $.each(classes.split(' '), function() {
			if (this in $.validator.classRuleSettings) {
				$.extend(rules, $.validator.classRuleSettings[this]);
			}
		});
		return rules;
	},

	attributeRules: function(element) {
		var rules = {};
		var $element = $(element);

		for (var method in $.validator.methods) {
			var value = $element.attr(method);
			if (value) {
				rules[method] = value;
			}
		}

		// maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs
		if (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) {
			delete rules.maxlength;
		}

		return rules;
	},

	metadataRules: function(element) {
		if (!$.metadata) return {};

		var meta = $.data(element.form, 'validator').settings.meta;
		return meta ?
			$(element).metadata()[meta] :
			$(element).metadata();
	},

	staticRules: function(element) {
		var rules = {};
		var validator = $.data(element.form, 'validator');
		if (validator.settings.rules) {
			rules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {};
		}
		return rules;
	},

	normalizeRules: function(rules, element) {
		// handle dependency check
		$.each(rules, function(prop, val) {
			// ignore rule when param is explicitly false, eg. required:false
			if (val === false) {
				delete rules[prop];
				return;
			}
			if (val.param || val.depends) {
				var keepRule = true;
				switch (typeof val.depends) {
					case "string":
						keepRule = !!$(val.depends, element.form).length;
						break;
					case "function":
						keepRule = val.depends.call(element, element);
						break;
				}
				if (keepRule) {
					rules[prop] = val.param !== undefined ? val.param : true;
				} else {
					delete rules[prop];
				}
			}
		});

		// evaluate parameters
		$.each(rules, function(rule, parameter) {
			rules[rule] = $.isFunction(parameter) ? parameter(element) : parameter;
		});

		// clean number parameters
		$.each(['minlength', 'maxlength', 'min', 'max'], function() {
			if (rules[this]) {
				rules[this] = Number(rules[this]);
			}
		});
		$.each(['rangelength', 'range'], function() {
			if (rules[this]) {
				rules[this] = [Number(rules[this][0]), Number(rules[this][1])];
			}
		});

		if ($.validator.autoCreateRanges) {
			// auto-create ranges
			if (rules.min && rules.max) {
				rules.range = [rules.min, rules.max];
				delete rules.min;
				delete rules.max;
			}
			if (rules.minlength && rules.maxlength) {
				rules.rangelength = [rules.minlength, rules.maxlength];
				delete rules.minlength;
				delete rules.maxlength;
			}
		}

		// To support custom messages in metadata ignore rule methods titled "messages"
		if (rules.messages) {
			delete rules.messages;
		}

		return rules;
	},

	// Converts a simple string to a {string: true} rule, e.g., "required" to {required:true}
	normalizeRule: function(data) {
		if( typeof data == "string" ) {
			var transformed = {};
			$.each(data.split(/\s/), function() {
				transformed[this] = true;
			});
			data = transformed;
		}
		return data;
	},

	// http://docs.jquery.com/Plugins/Validation/Validator/addMethod
	addMethod: function(name, method, message) {
		$.validator.methods[name] = method;
		$.validator.messages[name] = message != undefined ? message : $.validator.messages[name];
		if (method.length < 3) {
			$.validator.addClassRules(name, $.validator.normalizeRule(name));
		}
	},

	methods: {

		// http://docs.jquery.com/Plugins/Validation/Methods/required
		required: function(value, element, param) {
			// check if dependency is met
			if ( !this.depend(param, element) )
				return "dependency-mismatch";
			switch( element.nodeName.toLowerCase() ) {
			case 'select':
				// could be an array for select-multiple or a string, both are fine this way
				var val = $(element).val();
				return val && val.length > 0;
			case 'input':
				if ( this.checkable(element) )
					return this.getLength(value, element) > 0;
			default:
				return $.trim(value).length > 0;
			}
		},

		// http://docs.jquery.com/Plugins/Validation/Methods/remote
		remote: function(value, element, param) {
			if ( this.optional(element) )
				return "dependency-mismatch";

			var previous = this.previousValue(element);
			if (!this.settings.messages[element.name] )
				this.settings.messages[element.name] = {};
			previous.originalMessage = this.settings.messages[element.name].remote;
			this.settings.messages[element.name].remote = previous.message;

			param = typeof param == "string" && {url:param} || param;

			if ( this.pending[element.name] ) {
				return "pending";
			}
			if ( previous.old === value ) {
				return previous.valid;
			}

			previous.old = value;
			var validator = this;
			this.startRequest(element);
			var data = {};
			data[element.name] = value;
			$.ajax($.extend(true, {
				url: param,
				mode: "abort",
				port: "validate" + element.name,
				dataType: "json",
				data: data,
				success: function(response) {
					validator.settings.messages[element.name].remote = previous.originalMessage;
					var valid = response === true;
					if ( valid ) {
						var submitted = validator.formSubmitted;
						validator.prepareElement(element);
						validator.formSubmitted = submitted;
						validator.successList.push(element);
						validator.showErrors();
					} else {
						var errors = {};
						var message = response || validator.defaultMessage( element, "remote" );
						errors[element.name] = previous.message = $.isFunction(message) ? message(value) : message;
						validator.showErrors(errors);
					}
					previous.valid = valid;
					validator.stopRequest(element, valid);
				}
			}, param));
			return "pending";
		},

		// http://docs.jquery.com/Plugins/Validation/Methods/minlength
		minlength: function(value, element, param) {
			return this.optional(element) || this.getLength($.trim(value), element) >= param;
		},

		// http://docs.jquery.com/Plugins/Validation/Methods/maxlength
		maxlength: function(value, element, param) {
			return this.optional(element) || this.getLength($.trim(value), element) <= param;
		},

		// http://docs.jquery.com/Plugins/Validation/Methods/rangelength
		rangelength: function(value, element, param) {
			var length = this.getLength($.trim(value), element);
			return this.optional(element) || ( length >= param[0] && length <= param[1] );
		},

		// http://docs.jquery.com/Plugins/Validation/Methods/min
		min: function( value, element, param ) {
			return this.optional(element) || value >= param;
		},

		// http://docs.jquery.com/Plugins/Validation/Methods/max
		max: function( value, element, param ) {
			return this.optional(element) || value <= param;
		},

		// http://docs.jquery.com/Plugins/Validation/Methods/range
		range: function( value, element, param ) {
			return this.optional(element) || ( value >= param[0] && value <= param[1] );
		},

		// http://docs.jquery.com/Plugins/Validation/Methods/email
		email: function(value, element) {
			// contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
			return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);
		},

		// http://docs.jquery.com/Plugins/Validation/Methods/url
		url: function(value, element) {
			// contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/
			return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);
		},

		// http://docs.jquery.com/Plugins/Validation/Methods/date
		date: function(value, element) {
			return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
		},

		// http://docs.jquery.com/Plugins/Validation/Methods/dateISO
		dateISO: function(value, element) {
			return this.optional(element) || /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value);
		},

		// http://docs.jquery.com/Plugins/Validation/Methods/number
		number: function(value, element) {
			return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);
		},

		// http://docs.jquery.com/Plugins/Validation/Methods/digits
		digits: function(value, element) {
			return this.optional(element) || /^\d+$/.test(value);
		},

		// http://docs.jquery.com/Plugins/Validation/Methods/creditcard
		// based on http://en.wikipedia.org/wiki/Luhn
		creditcard: function(value, element) {
			if ( this.optional(element) )
				return "dependency-mismatch";
			// accept only digits and dashes
			if (/[^0-9-]+/.test(value))
				return false;
			var nCheck = 0,
				nDigit = 0,
				bEven = false;

			value = value.replace(/\D/g, "");

			for (var n = value.length - 1; n >= 0; n--) {
				var cDigit = value.charAt(n);
				var nDigit = parseInt(cDigit, 10);
				if (bEven) {
					if ((nDigit *= 2) > 9)
						nDigit -= 9;
				}
				nCheck += nDigit;
				bEven = !bEven;
			}

			return (nCheck % 10) == 0;
		},

		// http://docs.jquery.com/Plugins/Validation/Methods/accept
		accept: function(value, element, param) {
			param = typeof param == "string" ? param.replace(/,/g, '|') : "png|jpe?g|gif";
			return this.optional(element) || value.match(new RegExp(".(" + param + ")$", "i"));
		},

		// http://docs.jquery.com/Plugins/Validation/Methods/equalTo
		equalTo: function(value, element, param) {
			// bind to the blur event of the target in order to revalidate whenever the target field is updated
			// TODO find a way to bind the event just once, avoiding the unbind-rebind overhead
			var target = $(param).unbind(".validate-equalTo").bind("blur.validate-equalTo", function() {
				$(element).valid();
			});
			return value == target.val();
		}

	}

});

// deprecated, use $.validator.format instead
$.format = $.validator.format;

})(jQuery);

// ajax mode: abort
// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]});
// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()
;(function($) {
	var pendingRequests = {};
	// Use a prefilter if available (1.5+)
	if ( $.ajaxPrefilter ) {
		$.ajaxPrefilter(function(settings, _, xhr) {
			var port = settings.port;
			if (settings.mode == "abort") {
				if ( pendingRequests[port] ) {
					pendingRequests[port].abort();
				}
				pendingRequests[port] = xhr;
			}
		});
	} else {
		// Proxy ajax
		var ajax = $.ajax;
		$.ajax = function(settings) {
			var mode = ( "mode" in settings ? settings : $.ajaxSettings ).mode,
				port = ( "port" in settings ? settings : $.ajaxSettings ).port;
			if (mode == "abort") {
				if ( pendingRequests[port] ) {
					pendingRequests[port].abort();
				}
				return (pendingRequests[port] = ajax.apply(this, arguments));
			}
			return ajax.apply(this, arguments);
		};
	}
})(jQuery);

// provides cross-browser focusin and focusout events
// IE has native support, in other browsers, use event caputuring (neither bubbles)

// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation
// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target
;(function($) {
	// only implement if not provided by jQuery core (since 1.4)
	// TODO verify if jQuery 1.4's implementation is compatible with older jQuery special-event APIs
	if (!jQuery.event.special.focusin && !jQuery.event.special.focusout && document.addEventListener) {
		$.each({
			focus: 'focusin',
			blur: 'focusout'
		}, function( original, fix ){
			$.event.special[fix] = {
				setup:function() {
					this.addEventListener( original, handler, true );
				},
				teardown:function() {
					this.removeEventListener( original, handler, true );
				},
				handler: function(e) {
					arguments[0] = $.event.fix(e);
					arguments[0].type = fix;
					return $.event.handle.apply(this, arguments);
				}
			};
			function handler(e) {
				e = $.event.fix(e);
				e.type = fix;
				return $.event.handle.call(this, e);
			}
		});
	};
	$.extend($.fn, {
		validateDelegate: function(delegate, type, handler) {
			return this.bind(type, function(event) {
				var target = $(event.target);
				if (target.is(delegate)) {
					return handler.apply(target, arguments);
				}
			});
		}
	});
})(jQuery);
/*!
 * jQuery Form Plugin
 * version: 2.67 (12-MAR-2011)
 * @requires jQuery v1.3.2 or later
 *
 * Examples and documentation at: http://malsup.com/jquery/form/
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 */
;(function($) {

/*
	Usage Note:
	-----------
	Do not use both ajaxSubmit and ajaxForm on the same form.  These
	functions are intended to be exclusive.  Use ajaxSubmit if you want
	to bind your own submit handler to the form.  For example,

	$(document).ready(function() {
		$('#myForm').bind('submit', function(e) {
			e.preventDefault(); // <-- important
			$(this).ajaxSubmit({
				target: '#output'
			});
		});
	});

	Use ajaxForm when you want the plugin to manage all the event binding
	for you.  For example,

	$(document).ready(function() {
		$('#myForm').ajaxForm({
			target: '#output'
		});
	});

	When using ajaxForm, the ajaxSubmit function will be invoked for you
	at the appropriate time.
*/

/**
 * ajaxSubmit() provides a mechanism for immediately submitting
 * an HTML form using AJAX.
 */
$.fn.ajaxSubmit = function(options) {
	// fast fail if nothing selected (http://dev.jquery.com/ticket/2752)
	if (!this.length) {
		log('ajaxSubmit: skipping submit process - no element selected');
		return this;
	}

	if (typeof options == 'function') {
		options = { success: options };
	}

	var action = this.attr('action');
	var url = (typeof action === 'string') ? $.trim(action) : '';
	if (url) {
		// clean url (don't include hash vaue)
		url = (url.match(/^([^#]+)/)||[])[1];
	}
	url = url || window.location.href || '';

	options = $.extend(true, {
		url:  url,
		type: this[0].getAttribute('method') || 'GET', // IE7 massage (see issue 57)
		iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank'
	}, options);

	// hook for manipulating the form data before it is extracted;
	// convenient for use with rich editors like tinyMCE or FCKEditor
	var veto = {};
	this.trigger('form-pre-serialize', [this, options, veto]);
	if (veto.veto) {
		log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');
		return this;
	}

	// provide opportunity to alter form data before it is serialized
	if (options.beforeSerialize && options.beforeSerialize(this, options) === false) {
		log('ajaxSubmit: submit aborted via beforeSerialize callback');
		return this;
	}

	var n,v,a = this.formToArray(options.semantic);
	if (options.data) {
		options.extraData = options.data;
		for (n in options.data) {
			if(options.data[n] instanceof Array) {
				for (var k in options.data[n]) {
					a.push( { name: n, value: options.data[n][k] } );
				}
			}
			else {
				v = options.data[n];
				v = $.isFunction(v) ? v() : v; // if value is fn, invoke it
				a.push( { name: n, value: v } );
			}
		}
	}

	// give pre-submit callback an opportunity to abort the submit
	if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) {
		log('ajaxSubmit: submit aborted via beforeSubmit callback');
		return this;
	}

	// fire vetoable 'validate' event
	this.trigger('form-submit-validate', [a, this, options, veto]);
	if (veto.veto) {
		log('ajaxSubmit: submit vetoed via form-submit-validate trigger');
		return this;
	}

	var q = $.param(a);

	if (options.type.toUpperCase() == 'GET') {
		options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
		options.data = null;  // data is null for 'get'
	}
	else {
		options.data = q; // data is the query string for 'post'
	}

	var $form = this, callbacks = [];
	if (options.resetForm) {
		callbacks.push(function() { $form.resetForm(); });
	}
	if (options.clearForm) {
		callbacks.push(function() { $form.clearForm(); });
	}

	// perform a load on the target only if dataType is not provided
	if (!options.dataType && options.target) {
		var oldSuccess = options.success || function(){};
		callbacks.push(function(data) {
			var fn = options.replaceTarget ? 'replaceWith' : 'html';
			$(options.target)[fn](data).each(oldSuccess, arguments);
		});
	}
	else if (options.success) {
		callbacks.push(options.success);
	}

	options.success = function(data, status, xhr) { // jQuery 1.4+ passes xhr as 3rd arg
		var context = options.context || options;   // jQuery 1.4+ supports scope context 
		for (var i=0, max=callbacks.length; i < max; i++) {
			callbacks[i].apply(context, [data, status, xhr || $form, $form]);
		}
	};

	// are there files to upload?
	var fileInputs = $('input:file', this).length > 0;
	var mp = 'multipart/form-data';
	var multipart = ($form.attr('enctype') == mp || $form.attr('encoding') == mp);

	// options.iframe allows user to force iframe mode
	// 06-NOV-09: now defaulting to iframe mode if file input is detected
   if (options.iframe !== false && (fileInputs || options.iframe || multipart)) {
	   // hack to fix Safari hang (thanks to Tim Molendijk for this)
	   // see:  http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d
	   if (options.closeKeepAlive) {
		   $.get(options.closeKeepAlive, fileUpload);
		}
	   else {
		   fileUpload();
		}
   }
   else {
		$.ajax(options);
   }

	// fire 'notify' event
	this.trigger('form-submit-notify', [this, options]);
	return this;


	// private function for handling file uploads (hat tip to YAHOO!)
	function fileUpload() {
		var form = $form[0];

		if ($(':input[name=submit],:input[id=submit]', form).length) {
			// if there is an input with a name or id of 'submit' then we won't be
			// able to invoke the submit fn on the form (at least not x-browser)
			alert('Error: Form elements must not have name or id of "submit".');
			return;
		}
		
		var s = $.extend(true, {}, $.ajaxSettings, options);
		s.context = s.context || s;
		var id = 'jqFormIO' + (new Date().getTime()), fn = '_'+id;
		var $io = $('<iframe id="' + id + '" name="' + id + '" src="'+ s.iframeSrc +'" />');
		var io = $io[0];

		$io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });

		var xhr = { // mock object
			aborted: 0,
			responseText: null,
			responseXML: null,
			status: 0,
			statusText: 'n/a',
			getAllResponseHeaders: function() {},
			getResponseHeader: function() {},
			setRequestHeader: function() {},
			abort: function() {
				log('aborting upload...');
				var e = 'aborted';
				this.aborted = 1;
				$io.attr('src', s.iframeSrc); // abort op in progress
				xhr.error = e;
				s.error && s.error.call(s.context, xhr, 'error', e);
				g && $.event.trigger("ajaxError", [xhr, s, e]);
				s.complete && s.complete.call(s.context, xhr, 'error');
			}
		};

		var g = s.global;
		// trigger ajax global events so that activity/block indicators work like normal
		if (g && ! $.active++) {
			$.event.trigger("ajaxStart");
		}
		if (g) {
			$.event.trigger("ajaxSend", [xhr, s]);
		}

		if (s.beforeSend && s.beforeSend.call(s.context, xhr, s) === false) {
			if (s.global) { 
				$.active--;
			}
			return;
		}
		if (xhr.aborted) {
			return;
		}

		var timedOut = 0;

		// add submitting element to data if we know it
		var sub = form.clk;
		if (sub) {
			var n = sub.name;
			if (n && !sub.disabled) {
				s.extraData = s.extraData || {};
				s.extraData[n] = sub.value;
				if (sub.type == "image") {
					s.extraData[n+'.x'] = form.clk_x;
					s.extraData[n+'.y'] = form.clk_y;
				}
			}
		}

		// take a breath so that pending repaints get some cpu time before the upload starts
		function doSubmit() {
			// make sure form attrs are set
			var t = $form.attr('target'), a = $form.attr('action');

			// update form attrs in IE friendly way
			form.setAttribute('target',id);
			if (form.getAttribute('method') != 'POST') {
				form.setAttribute('method', 'POST');
			}
			if (form.getAttribute('action') != s.url) {
				form.setAttribute('action', s.url);
			}

			// ie borks in some cases when setting encoding
			if (! s.skipEncodingOverride) {
				$form.attr({
					encoding: 'multipart/form-data',
					enctype:  'multipart/form-data'
				});
			}

			// support timout
			if (s.timeout) {
				setTimeout(function() { timedOut = true; cb(); }, s.timeout);
			}

			// add "extra" data to form if provided in options
			var extraInputs = [];
			try {
				if (s.extraData) {
					for (var n in s.extraData) {
						extraInputs.push(
							$('<input type="hidden" name="'+n+'" value="'+s.extraData[n]+'" />')
								.appendTo(form)[0]);
					}
				}

				// add iframe to doc and submit the form
				$io.appendTo('body');
                io.attachEvent ? io.attachEvent('onload', cb) : io.addEventListener('load', cb, false);
				form.submit();
			}
			finally {
				// reset attrs and remove "extra" input elements
				form.setAttribute('action',a);
				if(t) {
					form.setAttribute('target', t);
				} else {
					$form.removeAttr('target');
				}
				$(extraInputs).remove();
			}
		}

		if (s.forceSync) {
			doSubmit();
		}
		else {
			setTimeout(doSubmit, 10); // this lets dom updates render
		}
	
		var data, doc, domCheckCount = 50;

		function cb() {
			if (xhr.aborted) {
				return;
			}
			
			var doc = io.contentWindow ? io.contentWindow.document : io.contentDocument ? io.contentDocument : io.document;
			if (!doc || doc.location.href == s.iframeSrc) {
				// response not received yet
				return;
			}
            io.detachEvent ? io.detachEvent('onload', cb) : io.removeEventListener('load', cb, false);

			var ok = true;
			try {
				if (timedOut) {
					throw 'timeout';
				}

				var isXml = s.dataType == 'xml' || doc.XMLDocument || $.isXMLDoc(doc);
				log('isXml='+isXml);
				if (!isXml && window.opera && (doc.body == null || doc.body.innerHTML == '')) {
					if (--domCheckCount) {
						// in some browsers (Opera) the iframe DOM is not always traversable when
						// the onload callback fires, so we loop a bit to accommodate
						log('requeing onLoad callback, DOM not available');
						setTimeout(cb, 250);
						return;
					}
					// let this fall through because server response could be an empty document
					//log('Could not access iframe DOM after mutiple tries.');
					//throw 'DOMException: not available';
				}

				//log('response detected');
				xhr.responseText = doc.body ? doc.body.innerHTML : doc.documentElement ? doc.documentElement.innerHTML : null; 
				xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
				xhr.getResponseHeader = function(header){
					var headers = {'content-type': s.dataType};
					return headers[header];
				};

				var scr = /(json|script)/.test(s.dataType);
				if (scr || s.textarea) {
					// see if user embedded response in textarea
					var ta = doc.getElementsByTagName('textarea')[0];
					if (ta) {
						xhr.responseText = ta.value;
					}
					else if (scr) {
						// account for browsers injecting pre around json response
						var pre = doc.getElementsByTagName('pre')[0];
						var b = doc.getElementsByTagName('body')[0];
						if (pre) {
							xhr.responseText = pre.textContent;
						}
						else if (b) {
							xhr.responseText = b.innerHTML;
						}
					}			  
				}
				else if (s.dataType == 'xml' && !xhr.responseXML && xhr.responseText != null) {
					xhr.responseXML = toXml(xhr.responseText);
				}
				
				data = httpData(xhr, s.dataType, s);
			}
			catch(e){
				log('error caught:',e);
				ok = false;
				xhr.error = e;
				s.error && s.error.call(s.context, xhr, 'error', e);
				g && $.event.trigger("ajaxError", [xhr, s, e]);
			}
			
			if (xhr.aborted) {
				log('upload aborted');
				ok = false;
			}

			// ordering of these callbacks/triggers is odd, but that's how $.ajax does it
			if (ok) {
				s.success && s.success.call(s.context, data, 'success', xhr);
				g && $.event.trigger("ajaxSuccess", [xhr, s]);
			}
			
			g && $.event.trigger("ajaxComplete", [xhr, s]);

			if (g && ! --$.active) {
				$.event.trigger("ajaxStop");
			}
			
			s.complete && s.complete.call(s.context, xhr, ok ? 'success' : 'error');

			// clean up
			setTimeout(function() {
				$io.removeData('form-plugin-onload');
				$io.remove();
				xhr.responseXML = null;
			}, 100);
		}

		var toXml = $.parseXML || function(s, doc) { // use parseXML if available (jQuery 1.5+)
			if (window.ActiveXObject) {
				doc = new ActiveXObject('Microsoft.XMLDOM');
				doc.async = 'false';
				doc.loadXML(s);
			}
			else {
				doc = (new DOMParser()).parseFromString(s, 'text/xml');
			}
			return (doc && doc.documentElement && doc.documentElement.nodeName != 'parsererror') ? doc : null;
		};
		var parseJSON = $.parseJSON || function(s) {
			return window['eval']('(' + s + ')');
		};
		
		var httpData = function( xhr, type, s ) { // mostly lifted from jq1.4.4
			var ct = xhr.getResponseHeader('content-type') || '',
				xml = type === 'xml' || !type && ct.indexOf('xml') >= 0,
				data = xml ? xhr.responseXML : xhr.responseText;

			if (xml && data.documentElement.nodeName === 'parsererror') {
				$.error && $.error('parsererror');
			}
			if (s && s.dataFilter) {
				data = s.dataFilter(data, type);
			}
			if (typeof data === 'string') {
				if (type === 'json' || !type && ct.indexOf('json') >= 0) {
					data = parseJSON(data);
				} else if (type === "script" || !type && ct.indexOf("javascript") >= 0) {
					$.globalEval(data);
				}
			}
			return data;
		};
	}
};

/**
 * ajaxForm() provides a mechanism for fully automating form submission.
 *
 * The advantages of using this method instead of ajaxSubmit() are:
 *
 * 1: This method will include coordinates for <input type="image" /> elements (if the element
 *	is used to submit the form).
 * 2. This method will include the submit element's name/value data (for the element that was
 *	used to submit the form).
 * 3. This method binds the submit() method to the form for you.
 *
 * The options argument for ajaxForm works exactly as it does for ajaxSubmit.  ajaxForm merely
 * passes the options argument along after properly binding events for submit elements and
 * the form itself.
 */
$.fn.ajaxForm = function(options) {
	// in jQuery 1.3+ we can fix mistakes with the ready state
	if (this.length === 0) {
		var o = { s: this.selector, c: this.context };
		if (!$.isReady && o.s) {
			log('DOM not ready, queuing ajaxForm');
			$(function() {
				$(o.s,o.c).ajaxForm(options);
			});
			return this;
		}
		// is your DOM ready?  http://docs.jquery.com/Tutorials:Introducing_$(document).ready()
		log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)'));
		return this;
	}
	
	return this.ajaxFormUnbind().bind('submit.form-plugin', function(e) {
		if (!e.isDefaultPrevented()) { // if event has been canceled, don't proceed
			e.preventDefault();
			$(this).ajaxSubmit(options);
		}
	}).bind('click.form-plugin', function(e) {
		var target = e.target;
		var $el = $(target);
		if (!($el.is(":submit,input:image"))) {
			// is this a child element of the submit el?  (ex: a span within a button)
			var t = $el.closest(':submit');
			if (t.length == 0) {
				return;
			}
			target = t[0];
		}
		var form = this;
		form.clk = target;
		if (target.type == 'image') {
			if (e.offsetX != undefined) {
				form.clk_x = e.offsetX;
				form.clk_y = e.offsetY;
			} else if (typeof $.fn.offset == 'function') { // try to use dimensions plugin
				var offset = $el.offset();
				form.clk_x = e.pageX - offset.left;
				form.clk_y = e.pageY - offset.top;
			} else {
				form.clk_x = e.pageX - target.offsetLeft;
				form.clk_y = e.pageY - target.offsetTop;
			}
		}
		// clear form vars
		setTimeout(function() { form.clk = form.clk_x = form.clk_y = null; }, 100);
	});
};

// ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm
$.fn.ajaxFormUnbind = function() {
	return this.unbind('submit.form-plugin click.form-plugin');
};

/**
 * formToArray() gathers form element data into an array of objects that can
 * be passed to any of the following ajax functions: $.get, $.post, or load.
 * Each object in the array has both a 'name' and 'value' property.  An example of
 * an array for a simple login form might be:
 *
 * [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
 *
 * It is this array that is passed to pre-submit callback functions provided to the
 * ajaxSubmit() and ajaxForm() methods.
 */
$.fn.formToArray = function(semantic) {
	var a = [];
	if (this.length === 0) {
		return a;
	}

	var form = this[0];
	var els = semantic ? form.getElementsByTagName('*') : form.elements;
	if (!els) {
		return a;
	}
	
	var i,j,n,v,el,max,jmax;
	for(i=0, max=els.length; i < max; i++) {
		el = els[i];
		n = el.name;
		if (!n) {
			continue;
		}

		if (semantic && form.clk && el.type == "image") {
			// handle image inputs on the fly when semantic == true
			if(!el.disabled && form.clk == el) {
				a.push({name: n, value: $(el).val()});
				a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
			}
			continue;
		}

		v = $.fieldValue(el, true);
		if (v && v.constructor == Array) {
			for(j=0, jmax=v.length; j < jmax; j++) {
				a.push({name: n, value: v[j]});
			}
		}
		else if (v !== null && typeof v != 'undefined') {
			a.push({name: n, value: v});
		}
	}

	if (!semantic && form.clk) {
		// input type=='image' are not found in elements array! handle it here
		var $input = $(form.clk), input = $input[0];
		n = input.name;
		if (n && !input.disabled && input.type == 'image') {
			a.push({name: n, value: $input.val()});
			a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
		}
	}
	return a;
};

/**
 * Serializes form data into a 'submittable' string. This method will return a string
 * in the format: name1=value1&amp;name2=value2
 */
$.fn.formSerialize = function(semantic) {
	//hand off to jQuery.param for proper encoding
	return $.param(this.formToArray(semantic));
};

/**
 * Serializes all field elements in the jQuery object into a query string.
 * This method will return a string in the format: name1=value1&amp;name2=value2
 */
$.fn.fieldSerialize = function(successful) {
	var a = [];
	this.each(function() {
		var n = this.name;
		if (!n) {
			return;
		}
		var v = $.fieldValue(this, successful);
		if (v && v.constructor == Array) {
			for (var i=0,max=v.length; i < max; i++) {
				a.push({name: n, value: v[i]});
			}
		}
		else if (v !== null && typeof v != 'undefined') {
			a.push({name: this.name, value: v});
		}
	});
	//hand off to jQuery.param for proper encoding
	return $.param(a);
};

/**
 * Returns the value(s) of the element in the matched set.  For example, consider the following form:
 *
 *  <form><fieldset>
 *	  <input name="A" type="text" />
 *	  <input name="A" type="text" />
 *	  <input name="B" type="checkbox" value="B1" />
 *	  <input name="B" type="checkbox" value="B2"/>
 *	  <input name="C" type="radio" value="C1" />
 *	  <input name="C" type="radio" value="C2" />
 *  </fieldset></form>
 *
 *  var v = $(':text').fieldValue();
 *  // if no values are entered into the text inputs
 *  v == ['','']
 *  // if values entered into the text inputs are 'foo' and 'bar'
 *  v == ['foo','bar']
 *
 *  var v = $(':checkbox').fieldValue();
 *  // if neither checkbox is checked
 *  v === undefined
 *  // if both checkboxes are checked
 *  v == ['B1', 'B2']
 *
 *  var v = $(':radio').fieldValue();
 *  // if neither radio is checked
 *  v === undefined
 *  // if first radio is checked
 *  v == ['C1']
 *
 * The successful argument controls whether or not the field element must be 'successful'
 * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
 * The default value of the successful argument is true.  If this value is false the value(s)
 * for each element is returned.
 *
 * Note: This method *always* returns an array.  If no valid value can be determined the
 *	   array will be empty, otherwise it will contain one or more values.
 */
$.fn.fieldValue = function(successful) {
	for (var val=[], i=0, max=this.length; i < max; i++) {
		var el = this[i];
		var v = $.fieldValue(el, successful);
		if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length)) {
			continue;
		}
		v.constructor == Array ? $.merge(val, v) : val.push(v);
	}
	return val;
};

/**
 * Returns the value of the field element.
 */
$.fieldValue = function(el, successful) {
	var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
	if (successful === undefined) {
		successful = true;
	}

	if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
		(t == 'checkbox' || t == 'radio') && !el.checked ||
		(t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
		tag == 'select' && el.selectedIndex == -1)) {
			return null;
	}

	if (tag == 'select') {
		var index = el.selectedIndex;
		if (index < 0) {
			return null;
		}
		var a = [], ops = el.options;
		var one = (t == 'select-one');
		var max = (one ? index+1 : ops.length);
		for(var i=(one ? index : 0); i < max; i++) {
			var op = ops[i];
			if (op.selected) {
				var v = op.value;
				if (!v) { // extra pain for IE...
					v = (op.attributes && op.attributes['value'] && !(op.attributes['value'].specified)) ? op.text : op.value;
				}
				if (one) {
					return v;
				}
				a.push(v);
			}
		}
		return a;
	}
	return $(el).val();
};

/**
 * Clears the form data.  Takes the following actions on the form's input fields:
 *  - input text fields will have their 'value' property set to the empty string
 *  - select elements will have their 'selectedIndex' property set to -1
 *  - checkbox and radio inputs will have their 'checked' property set to false
 *  - inputs of type submit, button, reset, and hidden will *not* be effected
 *  - button elements will *not* be effected
 */
$.fn.clearForm = function() {
	return this.each(function() {
		$('input,select,textarea', this).clearFields();
	});
};

/**
 * Clears the selected form elements.
 */
$.fn.clearFields = $.fn.clearInputs = function() {
	return this.each(function() {
		var t = this.type, tag = this.tagName.toLowerCase();
		if (t == 'text' || t == 'password' || tag == 'textarea') {
			this.value = '';
		}
		else if (t == 'checkbox' || t == 'radio') {
			this.checked = false;
		}
		else if (tag == 'select') {
			this.selectedIndex = -1;
		}
	});
};

/**
 * Resets the form data.  Causes all form elements to be reset to their original value.
 */
$.fn.resetForm = function() {
	return this.each(function() {
		// guard against an input with the name of 'reset'
		// note that IE reports the reset function as an 'object'
		if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType)) {
			this.reset();
		}
	});
};

/**
 * Enables or disables any matching elements.
 */
$.fn.enable = function(b) {
	if (b === undefined) {
		b = true;
	}
	return this.each(function() {
		this.disabled = !b;
	});
};

/**
 * Checks/unchecks any matching checkboxes or radio buttons and
 * selects/deselects and matching option elements.
 */
$.fn.selected = function(select) {
	if (select === undefined) {
		select = true;
	}
	return this.each(function() {
		var t = this.type;
		if (t == 'checkbox' || t == 'radio') {
			this.checked = select;
		}
		else if (this.tagName.toLowerCase() == 'option') {
			var $sel = $(this).parent('select');
			if (select && $sel[0] && $sel[0].type == 'select-one') {
				// deselect all other options
				$sel.find('option').selected(false);
			}
			this.selected = select;
		}
	});
};

// helper fn for console logging
// set $.fn.ajaxSubmit.debug to true to enable debug logging
function log() {
	if ($.fn.ajaxSubmit.debug) {
		var msg = '[jquery.form] ' + Array.prototype.join.call(arguments,'');
		if (window.console && window.console.log) {
			window.console.log(msg);
		}
		else if (window.opera && window.opera.postError) {
			window.opera.postError(msg);
		}
	}
};

})(jQuery);
//表单提交方法
function fromsubbind(formid,btnid){
	$(formid).keydown(function(e){
		if(e.keyCode==13){
			if( e && (e.scrElement || e.target)) (e.scrElement || e.target).blur();
			$(".tips").hide();//提示框内容清空
			$(formid).submit(); //处理事件
		}
	});
	//注册表单提交事件
	$(btnid).click(function(){
		$(".tips").hide();//提示框内容清空
		$(formid).submit();
	});
}

//报错信息和提示信息
function shinfo(form,error,info){
	$(form).find(":input").each(function(){
		$(this).blur(function(){
			if($(this).parent().find(error).html()==''){
				$(this).parent().find(error).html('&nbsp;');
			}
			$(this).parent().find(info).hide()
		}).focus(function(){
			if($(this).parent().find(error).html()=='&nbsp;'){
				$(this).parent().find(error).html('');
				$(this).parent().find(info).show()
			}
		});
	})

}




//重新获取手机验证码
function remobilecode(){
	var mobile = $("#mobile2_form #mobile").val();
    var user_id = $("#mobile2_form #user_id").val();
	$.ajax({
		type : "GET",
		url : consts('act') + "/User/ajaxMobileVaild",
		data : {
			mobile : mobile,user_id:user_id
		},
		dataType : "json",
		cache : "false",
		success : function(data, textStatus) {
			$("#mcode").val(data);
			alert("验证码已重新发送！");
		}
	})
}


/**
 * 表单验证等相关
 */
function fromvalidate(obj, action, Request, Response, errorsite) {
	$.validator.setDefaults({
		submitHandler : function(form) {
			form.submit();
		}
	});

	// 用户名验证/^[A-Za-z\u4e00-\u9fa5]+\d+[\w\u4e00-\u9fa5]*$|[\w\u4e00-\u9fa5]+$/
	jQuery.validator.addMethod("useridCheck", function(value, element) {
		  var len = value.replace(/[^\x00-]xff]/g,"xx").length;
		  if(len>20 && len<5)return false;//条件3 没办法判断实际长度只能用这个方法
		  if(/^[A-Za-z\u4e00-\u9fa5]+[\w\u4e00-\u9fa5]*$/.test(value))return true;//条件1~2
		  return false;
	}, "以中、英文开头，与数字、下划线组合为5-20字节");

	// 字符验证
	jQuery.validator.addMethod("stringCheck", function(value, element) {
		return this.otional(element) || /^[\u0391-\uFFE5\w]+$/.test(value);
	}, "只能包括中文字、英文字母、数字和下划线");

	// 中文字两个字节
	jQuery.validator.addMethod("byteRangeLength", function(value, element, param) {
		var length = value.length;
		for ( var i = 0; i < value.length; i++) {
			if (value.charCodeAt(i) > 127) {
				length++;
			}
		}
		return this.optional(element)
				|| (length >= param[0] && length <= param[1]);
	}, "请确保输入的值在3-15个字节之间(一个中文字算2个字节)");


	// 密码安全
	jQuery.validator.addMethod("isPassword", function(value, element) {
		  if(/^[A-Za-z0-9]+$/.test(value))return true;
		  return false;
	}, "只能为数字、字母");


	// 身份证号码验证
	jQuery.validator.addMethod("isIdCardNo", function(value, element) {
		return this.optional(element) || isIdCardNo(value);
	}, "请正确输入您的身份证号码");

	// 手机号码验证
	jQuery.validator.addMethod("isMobile", function(value, element) {
		var length = value.length;
		var mobile = /^13[0-9]{9}$|15[0-9]{9}$|18[0-9]{9}$|14[0-9]{9}$/;
		return this.optional(element) || (length == 11 && mobile.test(value));
	}, "请正确填写您的手机号码");

	// 电话号码验证
	jQuery.validator.addMethod("isTel", function(value, element) {
		var area = /^\d{3,4}$/;
		var tel = /(^\d{7,8})$/; // 电话号码格式010-12345678
		return this.optional(element) || (tel.test(value)||(area.test(value)));
	}, "请正确填写您的电话号码");

	// 联系电话(手机/电话皆可)验证
	jQuery.validator.addMethod("isPhone", function(value, element) {
		var length = value.length;
		var mobile = /^13[0-9]{9}$|15[0-9]{9}$|18[0-9]{9}$|14[0-9]{9}$/;
		var tel = /^\d{3,4}-?\d{7,9}$/;
		return this.optional(element) || (tel.test(value) || mobile.test(value));
	}, "请正确填写您的联系电话");

	// 邮政编码验证
	 jQuery.validator.addMethod("isZipCode", function(value, element) {
		 var tel = /^[0-9]{6}$/;
		 return this.optional(element) || (tel.test(value));
	 }, "请正确填写您的邮政编码");
	 //邮箱验证
	  jQuery.validator.addMethod("isEmail", function(value, element) {
		 var email = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
		 return this.optional(element) || (email.test(value));
	 }, "请正确填写您的邮箱");
	 //尺码转换器男士高度验证
	jQuery.validator.addMethod("isHeight", function(value, element) {
		if( value >= 148 && value <= 192 )return true;
		else return false;
	 }, "请填写适当范围身高(148CM - 192CM)");
	// 尺码转换器数值验证：3位数值
	jQuery.validator.addMethod("isSizeVal", function(value, element) {
		  var len = value.length;
		  if( value <= 0  )return false;
		  if(len<0 && len>4)return false;//条件3 没办法判断实际长度只能用这个方法
		  if(/^\d{1,3}$|\d.\d$/.test(value))return true;//条件1~2
		  return false;
	}, "请输入最大3位数值,且大于0");
	//数值，大于0
	jQuery.validator.addMethod("isIntVal", function(value, element) {
		  if( value <= 0  )return false;
		  if(/^\d+$/.test(value))return true;//条件1~2
		  return false;
	}, "请输入数值,且大于0");
	//密码不允许空格
	jQuery.validator.addMethod("spacePass", function(value, element) {
		  if(! /\s/g.test(value))return true;
		  return false;
	}, "密码不允许输入空格");
	/**
	 * 表单验证
	 */
	$(obj).validate({
						//onblur : true, // 鼠标移出触发事件
						rules : {// 规则
							user_id : {
								useridCheck : true,
								required : true,
								byteRangeLength : [ 5, 20 ],
								remote : {
									type : "GET",
									dataType : "json",
									url : consts('act') + "/User/ajaxCheckUser/type/user_id?time="+Math.random()+"&callback=?"
								}
							},
							user_id2 : {//注册弹出窗口验证用户唯一性
								useridCheck : true,
								required : true,
								byteRangeLength : [ 5, 20 ],
								remote : {
									type : "GET",
									dataType : "json",
									url : consts('act') + "/User/ajaxCheckCASUser/type/user_id2?time="+Math.random()+"&callback=?"
								}
							},
							opassword : {
								required : true,
								remote : {
									type : "GET",
									dataType : "json",
									url : consts('act') + "/User/ajaxCheckUser/type/opassword?time="+Math.random()+"&callback=?",
									data : {
										user_id : function() {
											return $(obj).find("#userid").val();
										},
										password : function(){
											return $(obj).find("#opassword").val();
										}
									}
								}
							},
							password : {
								required : true,
								spacePass:true,
								byteRangeLength : [ 6, 16 ]
							},
							repassword : {
								equalTo : "#password_" + $(obj).attr('id'),
								required : true,
								spacePass:true,
								byteRangeLength : [ 6, 16 ]
							},
							luser_id : {
								required : function(){
									$("#error_show").empty();
								}
							},
							lpassword : {
								required : function(){
									$("#error_show").empty();
								}
							},
							mobile : {
								isMobile : true,
								required : true,
								remote : {
									type : "GET",
									dataType : "json",
									url : consts('act') + "/User/ajaxCheckUser/type/mobile?time="+Math.random()+"&callback=?",
									data : {
										user_id : function() {
											return $("#user_id").text();
										}
									}
								}
							},
							add_mobile : {
								isMobile : true,
								required : true
							},
							phone : {
								isMobile : true,
								required : true
							},
							mobile_code : {
								required : true
							},
							email : {
								required : true,
								isEmail : true,
								remote : {
									type : "GET",
									dataType : "json",
									url : consts('act') + "/User/ajaxCheckUser/type/email?time="+Math.random()+"&callback=?",
									data : {
										user_id : function() {
											return $("#user_id").text();
										}
									}
								}
							},
							email2 : {
								required : true,
								isEmail : true,
								remote : {
									type : "GET",
									dataType : "json",
									url : consts('act') + "/User/ajaxCheckCASUser/type/email2?time="+Math.random()+"&callback=?"
								}
							},
							checknumber : {
								required : true,
								remote : {
									type : "GET",
									dataType : "json",
									url : consts('act') + "/User/ajaxCheckUser/type/checknumber?time="+Math.random()+"&callback=?"
								}
							},
							card_no : {
								required : true
							},
							card_pwd : {
								required : true,
								remote : {
									type : "GET",
									dataType : "json",
									url : consts('act') + "/User/ajaxCheckUser/type/card_no?time="+Math.random()+"&callback=?",
									data : {
										card_no : function() {
											return $(obj).find("input[name*='card_no']").val();
										},
										card_type : function() {
											return $("#card_type").val();
										}
									}
								}
							},
							height : {
								required : true,
								isHeight : true,
								isSizeVal : true
							},
							bust : {
								required : true,
								isSizeVal : true
							},
							weight : {
								required : true,
								isSizeVal : true
							},
							waist : {
								required : true,
								isSizeVal : true
							},
							type : {
								required : true
							},
							sex : {
								required : true
							},
							transform_type : {
								required : true
							},
							dimensions : {
								required : true
							},
							body_type_name : {
								required : true
							},
							hip_type : {
								required : true
							},
							role_id : {
								required : true
							},
							card_pwd_nocheck : {
								required : true
							},
							email_phone : {
								required : true
							},
							actvie_code : {
								required : true
							},
							order_sn : {
								required : true
							},
							semail : {
								required : true,
								isEmail : true
							},
							consignee : {
								required : true
							},
							province : {
								required : true
							},
							city : {
								required : true
							},
							district : {
								required : true
							},
							address : {
								required : true
							},
							nickName : {
								required : true,
								byteRangeLength : [ 3, 50 ]
							},
							realName : {
								required : true,
								byteRangeLength : [ 3, 50 ]
							},
							deal_check : {
								required : true
							},
							zipcode :{
								isZipCode :true
							},
							tel :{
								isTel :true
							},
							area :{
								isTel :true
							},
							job_number :{
								required : true
							},
							full_name :{
								required : true
							},
							birthday_y : {
								required : true
							},
							birthday_m : {
								required : true
							},
							birthday_d : {
								required : true
							},
							identity_card :{
								required : true
							},
							re_card_no :{
								required : true
							},
							mvp_no :{
								required : true
							},
							question_value:{
								required : true
							},
							question_type:{
								required : true
							},
							return_type:{
								required : true
							},
							return_sum:{
								isIntVal : true
							},
							reason:{
								required : true
							},
							explain:{
								required : true
							},
							tag_type:{
								required : true
							},
							exterior_type:{
								required : true
							},
							color_code:{
								required : true
							},
							size_code:{
								required : true
							},
							apply_whom:{
								required : true
							}
						},
						messages : {
							user_id : {
								useridCheck : "以中、英文开头，与数字、下划线组成，长度5-20字节",
								required : "用户名不能为空！",
								byteRangeLength : "用户名长度只能为5-20个字节！",
								remote : "用户名已存在！"
							},
							user_id2 : {
								useridCheck : "以中、英文开头，与数字、下划线组成，长度5-20字节",
								required : "用户名不能为空！",
								byteRangeLength : "用户名长度只能为5-20个字节！",
								remote : "用户名已存在！"
							},
							opassword : {
								required : "旧密码不能为空！",
								remote : "旧密码错误！"
							},
							password : {
								required : "密码不能为空！",
								isPassword : "密码不合法！",
								byteRangeLength : "密码长度只能为6-16个字节！"
							},
							repassword : {
								required : "确认密码不能为空！",
								byteRangeLength : "确认密码长度只能为6-16个字节！",
								equalTo : "两次输入密码不一致！"
							},
							luser_id : {
								required : "用户名不能为空！"
							},
							lpassword : {
								required : "密码不能为空！"
							},
							mobile : {
								isMobile : "手机号不合法！",
								required : "手机号不能为空！",
								remote : "手机号已注册过！"
							},
							add_mobile : {
								isMobile : "手机号不合法！",
								required : "手机号不能为空！"
							},
							phone : {
								isMobile : "手机号不合法！",
								required : "手机号不能为空！"
							},
							mobile_code : {
								required : "手机验证码不能为空！"
							},
							email : {
								required : "email不能为空！",
								isEmail : "email格式不合法！",
								remote : "邮箱已注册过！"
							},
							email2 : {
								required : "email不能为空！",
								isEmail : "email格式不合法！",
								remote : "邮箱已注册过！"
							},
							checknumber : {
								required : "请输入验证码！",
								remote : "验证码错误！"
							},
							card_no : {
								required : "卡号不能为空！"
							},
							card_pwd : {
								required : "卡密码不能为空！",
								remote : "您输入的卡号或密码无效！"
							},
							height : {
								required : "请填写你的身高(如：170厘米)",
								isHeight : "身高只适合(148CM - 192CM)范围内",
								isSizeVal : "请输入最大3位数值,且大于0"
							},
							bust : {
								required : "请填写你的胸围(如：80厘米或2.1尺)",
								isSizeVal : "请填写你的胸围(如：80厘米或2.1尺)"
							},
							weight : {
								required : "请填写你的体重(如：60千克)",
								isSizeVal : "请填写你的体重(如：60千克)"
							},
							waist : {
								required : "请填写你的腰围(如：80厘米或2.1尺)",
								isSizeVal : "请填写你的腰围(如：80厘米或2.1尺)"
							},
							type : {
								required : "提交类型不能为空"
							},
							sex : {
								required : "性别不能为空"
							},
							transform_type : {
								required : "上下装不能为空"
							},
							dimensions : {
								required : "长度单位不能为空"
							},
							body_type_name : {
								required : "体型不能为空"
							},
							hip_type : {
								required : "臀围不能为空"
							},
							role_id : {
								required : "角色组id不能为空"
							},
							card_pwd_nocheck : {
								required : "卡密码不能为空！"
							},
							email_phone : {
								required : "注册的邮箱或手机不能为空！"
							},
							actvie_code : {
								required : "请输入幸运号码！"
							},
							order_sn : {
								required : "请输入订单号码！"
							},
							semail : {
								required : "邮箱地址不能为空！",
								isEmail : "请正确填写邮箱地址"
							},
							consignee : {
								required : "姓名不能为空！"
							},
							province : {
								required : "省不能为空！"
							},
							city : {
								required : "城市不能为空！"
							},
							district : {
								required : "区不能为空！"
							},
							address : {
								required : "地址不能为空！"
							},
							nickName : {
								required : "昵称不能为空！",
								byteRangeLength : "3个字符-50个字符之间！(一个中文字为2个字符)"
							},
							realName : {
								required : "姓名不能为空！",
								byteRangeLength : "3个字符-50个字符之间！(一个中文字为2个字符)"
							},
							deal_check : {
								required : "请先确认服务协议！"
							},
							zipcode :{
								isZipCode :"请正确填写您的邮政编码！"
							},
							tel :{
								isTel :"请正确填写你的电话号！"
							},
							area :{
								isTel :"请正确填写区号！"
							},
							job_number :{
								required : '员工号不能为空！'
							},
							full_name :{
								required : '姓名不能为空！'
							},
							birthday_y : {
								required : "年份不能为空！"
							},
							birthday_m : {
								required : "月份不能为空！"
							},
							birthday_d : {
								required : "日期不能为空！"
							},
							identity_card :{
								required : '身份证号不能为空！'
							},
							re_card_no :{
								required : '确认卡号不能为空！'
							},
							mvp_no :{
								required : 'vip卡号不能为空'
							},
	   						question_value :{
								required : '意见反馈内容不能为空'
							},
	   						question_type :{
								required : '意见反馈类型不能为空'
							},
							return_type:{
								required : '请选择处理方式'
							},
							return_sum:{
								isIntVal : '退换货数量不正确'
							},
							reason:{
								required : '请选择退换货原因'
							},
							explain:{
								required : '请填写退换货具体说明'
							},
							tag_type:{
								required : '请选择商品吊牌'
							},
							exterior_type:{
								required : '请选择商品外观'
							},
							color_code:{
								required : '请选择颜色'
							},
							size_code:{
								required : '请选择尺寸'
							},
							apply_whom:{
								required : '为谁申请不能为空'
							}
						},
						errorPlacement : function(error, element) {
							// 显示错误提示信息
							element.parent().find(errorsite).html("&nbsp;");
							error.prependTo(element.parent().find(errorsite));
						},
						submitHandler : function() {
							// 验证后提交动作（AJAX表单提交）
							ajaxsubmitfun(obj, action);
						},
						errorClass : "invalid",
						focusInvalid : false,
						onkeyup : false
});

	/**
	 * +---------------------------------------------------------- AJAX表单提交
	 * +----------------------------------------------------------
	 *
	 * @access public
	 *         +----------------------------------------------------------
	 */
	function ajaxsubmitfun(obj, action) {
        if(action.indexOf('login')>0)
        {
            //$('#_loadingLoin').html('正在登陆....');
            $("#_logingText").show();
            $("#_loadingLoin").hide();
        }
        if(action.indexOf('register')>0)
        {
            $("#_registeringText").show();
            $("#_registering").hide();

            //$('#_registering').html('正在注册.....');
        }
		var options = {
			beforeSubmit : Request,
			success : Response,
			url : action + "?time="+Math.random()+"&callback=?",
			type : 'get',
			dataType : 'json'
		};
		$(obj).ajaxSubmit(options);
	}
}

function fpwdbeforeSubmit() {
	var minute = 60;
	CountDown();
	function CountDown(){
		if(minute > 0) {
			$('#sub_btn').hide();
			$('#fpwd_text').html('<button type="button" style="padding:2px 4px"><font color="red">' + minute + '</font>秒后，可以重新提交！</button><br>');
			$('#fpwd_text').show();
			minute--;
			setTimeout(CountDown,1000);
		} else {
			$('#fpwd_text').hide();
			$('#sub_btn').show();
		}
	 }
}

/**
 * +---------------------------------------------------------- AJAX表单提交(执行前触发函数)
 * +----------------------------------------------------------
 *
 * @access public +----------------------------------------------------------
 * @param array
 *            formData
 * @param string
 *            jqForm
 * @param string
 *            options
 *            +----------------------------------------------------------
 */
function Request(formData, jqForm, options) {
	var queryString = $.param(formData);
	return true;
}


/**
 * +----------------------------------------------------------
 * AJAX表单提交(回调函数)
 * +----------------------------------------------------------
 * @access public
 * +----------------------------------------------------------
 * @param string	responseText //响应返回值
 * @param string	statusText //返回状态
 * +----------------------------------------------------------
 */
//登陆页
function loginResponse(responseText, statusText) {
	var current_div = '';
	// 判断是否字符串 JSON缺头
	if (responseText.substr)
		responseText = eval('(' + responseText + ')');
	switch (responseText.status) {
	case 0://vip激活
		if(responseText.returnurl.indexOf("&returnurl=")==-1)//判断&returnurl=是否存在
			responseText.returnurl = "returnurl=" + responseText.returnurl;
		location.href=consts('act') + '/User/vip?' + responseText.returnurl;
		break;
	case 1:// 成功
		if(responseText.returnurl.indexOf("http://")==-1)//判断http://是否存在
			responseText.returnurl="http://"+responseText.returnurl;
			location.href=responseText.returnurl;

		break;
	default:
		$("#error_show").text(responseText.message);
		break;
	}
}
/**
 * +----------------------------------------------------------
 * AJAX表单提交(回调函数)
 * +----------------------------------------------------------
 * @access public
 * +----------------------------------------------------------
 * @param string	responseText //响应返回值
 * @param string	statusText //返回状态
 * +----------------------------------------------------------
 */
//vip激活页
function vipResponse(responseText, statusText){
	var current_div = '';
	// 判断是否字符串 JSON缺头
	if (responseText.substr)
		responseText = eval('(' + responseText + ')');
	switch (responseText.status) {
	case 1:// 成功
		if(responseText.returnurl.indexOf("http://")==-1)//判断http://是否存在
			responseText.returnurl="http://"+responseText.returnurl;
			location.href=responseText.returnurl;
		break;
	default://激活失败
		alert(responseText.message);
		break;
	}

}
//注册页
function registerResponse(responseText, statusText) {
	var current_div = '';
	// 判断是否字符串 JSON缺头
	if (responseText.substr) {
		responseText = eval('(' + responseText + ')');
	}
	switch (responseText.status) {
	case 1:
		//解除绑定click事件防止注册后切换其他注册方式
		$("#changetab a").unbind('click');
		$("#changetab a").click(function(){
			window.location.reload();
		});
		current_div = $("#reg_success_div");
		$("#show_user_id").text(responseText.user_id);
		$(current_div).siblings('.RG_sbox1').hide();
		$(current_div).fadeIn(300);
		ACTracker.track({ "type": "event", "action": "register","value": responseText.user_id});
		try{var _mvsite=new $mvt.$site("m-249-0");
			_mvsite.$logConversion();
		}catch(err){
		}
		try{_mvsite.$logOrder(responseText.user_id,0,"","","","0");
		}catch(err){
		}
		_checkCAS();
		break;
	case 2://注册失败
		alert(responseText.message)
		break;
	case 3:// 手机注册获取验证码
		current_div = $("#mobile2_div");
		$("#mobile2_div #mcode").val(responseText.mcode);
		$("#mobile2_div #user_id").val(responseText.user_id);
		$("#mobile2_div #mobile2").val(responseText.mobile);
		$(current_div).siblings().hide();
		$(current_div).fadeIn(300);
		break;
	}
}
//尺码转换器提交
function sizeTransformResponse(responseText, statusText) {
	var current_div = '';
	// 判断是否字符串 JSON缺头
	if (responseText.substr)
		responseText = eval('(' + responseText + ')');
	switch (responseText.status) {
	case 1:
		$('#'+responseText.div+'_div').hide();
		$('#end_div #enter_info').empty().html(responseText.info);
		$('#end_div #recommend_size').empty().html(responseText.size);
		$('#end_div #end_role_id').empty().val(responseText.role_id);
		$('#end_div #end_role_info').empty().html(responseText.role_info);
		$('#end_div #end_is_save').empty().val('1');
		var role_name = new Array();
		role_name = ['本人','丈夫','妻子','父亲','母亲','儿子','女儿','朋友'];
		$('#end_div #end_role_name').empty().html(role_name[responseText.role_id]);
		$('#end_div').show();
		break;
	case 2:
		$('#up1_div').hide();
		$('#up2_div #body_name').empty().append(responseText.body_name);
		$('#up2_div #body_feature').empty().html(responseText.body_feature);
		$('#up2_div #body_feature span').hide();
		$('#up2_div #height').empty().val(responseText.height);
		$('#up2_div #weight').empty().val(responseText.weight);
		$('#up2_div #role_id').empty().val(responseText.role_id);
		$('#up2_div').show();
		break;
	case 3:
		$('#down1_div').hide();
		$('#down2_div #hip_explain').empty().html(responseText.hip_explain);
		$('#down2_div #height').empty().val(responseText.height);
		$('#down2_div #waist').empty().val(responseText.waist);
		$('#down2_div #role_id').empty().val(responseText.role_id);
		$('#down2_div').show();
		break;
	}
}
//弹出层-ajax刷新
function boxResponse(responseText, statusText) {
	var current_div = '';
	// 判断是否字符串 JSON缺头
	if (responseText.substr)
		responseText = eval('(' + responseText + ')');
	switch (responseText.status)
    {
        case 0:location.reload();break;
        case 1:
        if(responseText.fcas==1)
        {
            jQuery.getScript(responseText.url);
            setTimeout(myReload,1000);
        }
		break;
		case 2:
        if(responseText.type=='register')
        {
            alert (responseText.message);
            //$('#_registering').html('<a  class="btn btn_important"  id="register"><span>注 册</span></a>');
            $("#_registeringText").hide();
            $("#_registering").show();
        }
        else
        {
            $("#login_form .errorinfo:first").html(responseText.message);
            //$('#_loadingLoin').html('<a class="btn btn_important" id="login" ><span >登 录</span></a> &nbsp;&nbsp;&nbsp;&nbsp;<a target="_blank" href="'+consts('act')+'/User/forgetpwd">找回密码？</a>');
            $("#_loadingLoin").show();
            $("#_logingText").hide();
        }
        break;
	}
}
function myReload()
{
	var curUrl = location.href;
	location.href=consts('act')+"/User/login?return_url="+curUrl;
}
//弹出层-url刷新
function boxUrlResponse(responseText, statusText) {
	var current_div = '';
	// 判断是否字符串 JSON缺头
	if (responseText.substr)
		responseText = eval('(' + responseText + ')');
	switch (responseText.status) {
		case 0:
			location.reload();
			break;
		case 1:
			location.reload();
			break;
		default:
			alert(responseText.message)
			break;
	}
}

//改变密码相关
function changepwdResponse(responseText, statusText) {
	// 判断是否字符串 JSON缺头
	if (responseText.substr)
		responseText = eval('(' + responseText + ')');
	switch (responseText.status) {
	case 0:
		$('#result_error').text(responseText.message);
		break;
	case 1:
		$('#formModifyPwd :input').val('');
		$('#result_error').html('');
		$('.Csuccess').show();
		alert(responseText.message);
		location.reload();
		break;
	case 2:
		alert('修改密码失败')
		break;
	}
}

//邀请好友相关
function inviteResponse(responseText, statusText) {
	// 判断是否字符串 JSON缺头
	if (responseText.substr)
		responseText = eval('(' + responseText + ')');
	switch (responseText.status) {
	case 0:
		alert('邮件发送失败！');
		break;
	case 1:
		alert('您的邀请已经成功送出！');
		break;
	case 2:
		break;
	}
}

//忘记密码相关
function fpwdResponse(responseText, statusText) {
	// 判断是否字符串 JSON缺头
	if (responseText.substr)
		responseText = eval('(' + responseText + ')');
	switch (responseText.status) {
	case 0:
		$("#show_error").text("该用户不存在！");
		break;
	case 1:
		$("#form1").hide();
		$(".GP_step3").show();
		$("#sucess_info").after('<p class="line1">系统已向你的邮箱：<span>' + responseText.code + '</span>发送了一封邮件，请在24小时之内根据邮件的提示重新设置密码。</p><p class="line2">（如果您登录邮箱后发现没有收信箱没有邮件，请到垃圾邮箱查找或者 <a href="'+consts('act')+'/User/forgetpwd">重新发送</a> ）</p>');
		break;
	case 2:
		$("#form1").hide();
		$(".GP_step3").show();
		$("#sucess_info").after('<p class="line1">系统已向你的手机：<span>' + responseText.code + '</span>发送了一条短信，请在24小时之内根据短信的提示重新设置密码。</p><p class="line2">（如果您没有收到短信请 <a href="'+consts('act')+'/User/forgetpwd">重新发送</a> ）</p>');
		break;
	case 3:
		$("#show_error").text("注册邮箱或手机号错误！请联系客服！");
		break;
	}
}



//淘宝红包相关
function getpackageResponse(responseText, statusText) {
	// 判断是否字符串 JSON缺头
	if (responseText.substr)
		responseText = eval('(' + responseText + ')');
	if(responseText.status==1){
		$('#jsGetenvelope .getbox').addClass('Ldn');
		$('#jsGetenvelope .successbox').removeClass('Ldn');
	}else{
		$('#showmsg').text(responseText.msg);
	}


}
//修改地址相关
function addressResponse(responseText, statusText) {
	// 判断是否字符串 JSON缺头
	if (responseText.substr)
		responseText = eval('(' + responseText + ')');
	switch(responseText){
		case 0:
			alert("必填内容不能为空！");
			break;
		case 1:
			alert("添加成功！");
			location.href=consts('member')+'/MemberInfo/address';
			break;
		case 5:
			alert("修改成功！");
			location.href=consts('member')+'/MemberInfo/address';
			break;
		case 2:
			alert("你不能再添加新的地址了！");
			break;
	}
}
//用户角色信息修改
function roleResponse(responseText, statusText) {
	// 判断是否字符串 JSON缺头
	if (responseText.substr)
		responseText = eval('(' + responseText + ')');
	switch(responseText){
		case 1:
			alert("操作成功！");
			location.href=consts('member')+'/MemberInfo/info?type=3';
			break;
		case 2:
			alert("你不能再添加新的信息了！");
			break;
	}
}//用户信息修改相关
function infoResponse(responseText, statusText) {
	alert(responseText.message);
}
//卡绑定相关
function cardResponse(responseText, statusText) {
	// 判断是否字符串 JSON缺头
	if (responseText.substr)
		responseText = eval('(' + responseText + ')');
	switch(responseText.status){
		case 0:
			$('.GD_successbox').css('display', 'block');
			$('input[name="account"]').attr('value', '');
			$('input[name="password"]').attr('value', '');
			$('#card_success_div').show();
			$('#card_form_div').hide();
			break;
		default:
            $("#card_pwd").text(responseText.msg);
			break;
	}
}
//内部员工绑定
function staffbindResponse(responseText, statusText) {
	// 判断是否字符串 JSON缺头
	if (responseText.substr)
		responseText = eval('(' + responseText + ')');
	switch(responseText.error){
		case 0:
			$('.GD_successbox').css('display', 'block');
			$('input[name="account"]').attr('value', '');
			$('input[name="password"]').attr('value', '');
			$('#card_success_div').show();
			$('#card_form_div').hide();
			break;
		default:
            $("#showerr").text(responseText.message);
			break;
	}
}
//内购卡绑定
function memcardbindResponse(responseText, statusText) {
	// 判断是否字符串 JSON缺头
	if (responseText.substr)
		responseText = eval('(' + responseText + ')');
	switch(responseText.error){
		case 0:
			$('.GD_successbox').css('display', 'block');
			$('input[name="account"]').attr('value', '');
			$('input[name="password"]').attr('value', '');
			$('#card_success_div').show();
			$('#card_form_div').hide();
			break;
		default:
            $("#showerr").text(responseText.message);
			break;
	}
}
//退换货申请
function returnChangeFormResponse(responseText, statusText) {
	// 判断是否字符串 JSON缺头
	if (responseText.substr)
		responseText = eval('(' + responseText + ')');
	switch(responseText.status){
		case '0':
			alert(responseText.message);
			break;
		case '1':
			location.href=consts('member') + '/MemberTrade/return_change_success.shtml';
			break;
	}
}
/* *
 * 首页和品牌页 活动图片 左右切换
 */
(function($) {
    $.fn.extend({
        //滚动图片插件
        scroller: function(options) {
            var defaults = {
                count: 3,
                times: 3000,
                duration: 500,
                auto: 1
            }
            var options = $.extend(defaults, options);
            var obj = $(this);
            obj.wrap('<div class="ui_scroller_container"><div class="ui_scroller"></div></div>');

            var showImg = function() {
                obj.find("img").each(function(i) {
                    if (i < options.count) {
                        if ($(this).attr("src") != $(this).attr("rel")) {
                            $(this).attr("src", $(this).attr("rel"));
                        }
                    }
                });
            }
            showImg();

            //首先判断是否满足滚动条件 获取li个数长度和设置滚动的个数进行比较
            if (obj.find("li").length <= options.count) {
                obj.find(".ui_scroller_prev, .ui_scroller_next").hide();
                return;
            };
            //设置一个变量 当点击一次运行未结束之间没有事件
            var iswork = true;
            //计算滚动的长度 =获取div的长度除设置显示的个数
            var scwidth = 0 - (obj.parent().width() / options.count);

            //容器的长度
            obj.width(Math.abs(obj.find("li").size() * scwidth) + "px");

            //向左移动的方法
            var moveleft = function() {
                if (iswork) {
                    iswork = false;
                    //给ul定义动作，当运行完第一个的时候把第一个移除放入最后一个位置，并且重置到初始值
                    obj.animate({
                        'margin-left': scwidth
                    },
                    options.duration,
                    function() {
                        obj.find("li").eq(0).appendTo(obj);
                        showImg();
                        obj.css({
                            'margin-left': 0
                        });
                        iswork = true;
                    });
                }
            }

            //向右移动的方法
            var moveRight = function() {
                if (iswork) {
                    iswork = false;
                    //给ul定义动作，当运行完最后一个的时候把最后一个移除放入第一个位置，并且重置到初始值
                    obj.find("li").last().prependTo(obj);
                    obj.css({
                        'margin-left': scwidth
                    });
                    obj.animate({
                        'margin-left': 0
                    },
                    options.duration,
                    function() {
                        showImg();
                        iswork = true;
                    });
                }
            }

            //给左右按钮新增点击事件
            obj.after("<a href='javascript:;' class='ui_scroller_prev'></a><a href='javascript:;' class='ui_scroller_next'></a>");
            obj.parent().find(".ui_scroller_prev").bind("click",
            function() {
                moveRight();
            });
            obj.parent().find(".ui_scroller_next").bind("click",
            function() {
                moveleft();
            });

            if (options.auto == 1) {
                //定义自动播放参数接收函数
                var autoMove = function() {
                    moveleft();
                }

                var sit;
                //开始运行
                function startMove() {
                    sit = setInterval(autoMove, options.times);
                }
                startMove();

                //新增图片悬停 停止播放效果
                obj.parent().hover(function() {
                    //鼠标滑过移除事件自动播放事件
                    clearInterval(sit);
                },
                function() {
                    //重新运行函数
                    startMove();
                });
            }
        }
    });
})(jQuery);